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

$watch's object not triggered when attributes are changed

本文关键字:watch 对象 属性      更新时间:2023-09-26

我有一个对象:

$scope.obj = {bar: 'bar value', foo: 'foo value'};

我想知道酒吧、foo 或两者是否改变。

我正在这样做:

$scope.$watch('obj', function() { console.log("watching obj") });

如果我更改对象的属性"观看 obj"消息,它永远不会显示。但是,如果我观看'obj.foo''obj.bar'我可以看到消息。所以,问题是:

为什么当我观看'obj'时没有显示消息? 我该怎么做?

这个 plunker 更好地展示了问题...

您需要

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");
});

哪个比深度观看更有效。