0

我有一个对象:

$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更好地显示了这个问题......

4

2 回答 2

3

您需要将objectEquality参数设置为true.

http://docs.angularjs.org/api/ng .$rootScope.Scope

// $watch(watchExpression, listener, objectEquality)

$scope.$watch('obj', function() {
    console.log("watching obj")
}, true);
于 2013-10-21T15:41:31.087 回答
0

我将添加到@moderndegree 的答案,

如果您要观看的对象有几个元素(在这种情况下只有两个),您也可以使用

$scope.$watch('obj.foo+obj.bar', function() {
    console.log("changed");
});

这比深度观察更有效。

于 2013-10-21T19:09:09.640 回答