我有一个对象:
$scope.obj = {bar: 'bar value', foo: 'foo value'};
我想知道bar,foo或两者是否都有变化。
我这样做:
$scope.$watch('obj', function() { console.log("watching obj") });
并且如果我更改对象的属性“观看obj”消息它永远不会显示。但是,如果我看'obj.foo'
或'obj.bar'
,我就会看到该消息。所以,问题是:
为什么在观看'obj'
时消息未显示?我该怎么做?
这plunker更好地展示了问题......
答案 0 :(得分:3)
您需要将objectEquality
参数设置为true
。
http://docs.angularjs.org/api/ng。$ rootScope.Scope
// $ watch(watchExpression,listener,objectEquality)
$scope.$watch('obj', function() {
console.log("watching obj")
}, true);
答案 1 :(得分:0)
我将添加@ moderndegree的答案,
如果您要观看的对象有少量元素(在这种情况下只有两个),您也可以使用
$scope.$watch('obj.foo+obj.bar', function() {
console.log("changed");
});
这比深度观看更有效。