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