javascript - Angular : automatically detect change in model

标签 javascript angularjs

假设我想做一些事情,比如每当模型的值发生变化时自动运行一些代码(比如将数据保存到服务器)。唯一的方法是在每个可能改变模型的控件上设置类似 ng-change 的东西吗?

也就是说,有了 View ,事情就会随着模型的改变而改变,而不必显式地连接任何东西。是否有能够运行保存到服务器的代码的模拟?有点像

myModel.on('change', function() {
  $.post("/my-url", ...);
});

就像你可能看到的 Backbone 一样。

最佳答案

在使用 {{}} 和/或 ng-model 的 View 中,Angular 正在幕后为您设置 $watch()es。

默认 $watch参照比较。如果将 $watch 的第三个参数设置为 true,Angular 将改为“浅”监视对象的变化。对于数组,这意味着比较数组项,对于对象映射,这意味着观察属性。所以这应该做你想做的:

$scope.$watch('myModel', function() { ... }, true);

更新:Angular v1.2 为此添加了一个新方法,`$watchCollection() :

$scope.$watchCollection('myModel', function() { ... });

请注意,“浅”一词用于描述比较而不是“深”,因为没有遵循引用——例如,如果被监视的对象包含一个属性值,该属性值是对另一个对象的引用,则该引用不是随后比较另一个对象。

关于javascript - Angular : automatically detect change in model,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15423927/

相关文章:

javascript - 向表单添加样式

javascript - 在 Angular 中设置上下文范围

python - 如何去除html中的特殊字符

javascript - 从 Firebase 上传/下载音频

javascript - 存储动态添加的输入的 $index 值

javascript - 将 javascript 计算器中的几个操作串在一起

javascript - 如何将 MVC 模型数据与 Angular JS 模型链接起来

javascript - Chrome 和 Firefox 无法访问 iPhone 相机

angularjs - Ionic v1 中的 img src 路径

javascript - 检查 Javascript 对象是否包含与另一个对象相同的键/值对