繁体   English   中英

属性更改时不会触发$ watch的对象

[英]$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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM