簡體   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