[英]$watch's object not triggered when attributes are changed
我有一个对象:
$scope.obj = {bar: 'bar value', foo: 'foo value'};
我想知道bar,foo或两者都改变了。
我正在这样做:
$scope.$watch('obj', function() { console.log("watching obj") });
如果我更改了对象的属性“ watching obj”,则消息永远不会显示。 但是,如果我观看'obj.foo'
或'obj.bar'
,则可以看到该消息。 因此,问题是:
为什么当我观看'obj'
时消息没有显示? 我该怎么办?
这个傻瓜更好地显示了问题...
您需要将objectEquality
参数设置为true
。
http://docs.angularjs.org/api/ng。$ rootScope.Scope
// $ watch(watchExpression,listener,objectEquality)
$scope.$watch('obj', function() {
console.log("watching obj")
}, true);
我将添加到@moderndegree的答案中,
如果您要观看的对象只有几个元素(在这种情况下只有两个),您也可以使用
$scope.$watch('obj.foo+obj.bar', function() {
console.log("changed");
});
这比深度监视更有效。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.