在Angular 1.3应用程序中,我有一个范围对象(简化),如下所示:
$scope.data = {
myObject = {
id = 0
someItems = [
{
id = 0,
title = foo
},
{
id = 0,
title = foo
}
]
}
}
我的真实对象包含更多属性和循环引用。
如果data.myObject
分配了新对象,data.myObject.id
的值发生了变化,或者myObject.someItems
中添加或删除了某个项目,我需要一个被调用的手表。
这可以通过两只手表一起实现:
$scope.$watchGroup(
['data.myObject', 'data.myObject.id'],
function () {
doSomething();
}
);
$scope.$watchCollection(
'data.myObject.someItems',
function () {
doSomething();
}
);
这种方法的问题在于,如果data.myObject
更改doSomething
被调用两次。因此,我正在寻找一种方法来处理单watch
。
等式监视似乎不合适,因为对象上有许多其他属性不需要监视。由于我的对象包含循环引用,因此提议的here之类的解决方案也不起作用。
更新 这是一个JSFiddle。单击“更改1”,“更改2”和“更改3”都应该导致单个警报。目前点击“更改1”会发出两个警报。