【发布时间】:2014-12-11 20:55:18
【问题描述】:
$watchCollection 是否能够忽略对以 $ 开头的属性的更改?这种行为已经存在使用深层$watch,因为它依赖于angular.equals 进行比较。
理想情况下,$watchCollection 是浅层观察对象的首选(也是唯一)方法。不同的行为是否有正当理由?
例子
$scope.foo = {
$bar: 'someValue',
baz: 123456
};
$scope.$watch('foo', function() {
console.log('watch');
}, true);
$scope.$watchCollection('foo', function(){
console.log('watchCollection');
});
// logs 'watch'
// logs 'watchCollection'
$scope.foo.baz = 654321;
// logs 'watchCollection'
$scope.foo.$bar = 'changed'
【问题讨论】:
-
我相信
$watchCollection是看arrayLike对象。$watchCollection is the preferred (and only) way to shallow watch an object?我想你可以只使用不带第三个参数的 watch 来浅表观察。 -
@PSL watch 没有第三个参数只检查对象引用而不是相等性。所以
var a = {};和a.newProp = 1;不会触发它,因为a == a;仍然是true。而且 $watchCollection 也不限于 arrayLike 对象;( -
啊我忘了...
-
为此我在 github 上发起了一个问题:github.com/angular/angular.js/issues/10426
标签: javascript angularjs angularjs-scope