【发布时间】:2014-06-05 17:16:11
【问题描述】:
假设我有一个绑定到我的范围的动物对象数组。每个对象都有一个“名称”属性和一个“声音”属性。
然后我 $watch 数组并将 objectEquality 标志设置为 true(第三个参数)。
在我看来,我使用动物数组的 ng-repeat 为每个动物创建一个按钮。然后我将点击处理函数传递给相应的动物对象。
在点击处理程序中,如果我要更新其中一只动物的名称,$watch 会获取更改,我可以在侦听器函数中处理它。
现在我遇到的问题是,如果我用新对象重新分配其中一个动物对象,而不是仅仅更改其属性,$watch 不会接受此更改。对象数组明显改变了,但我的监听器没有被调用。
以下 plunkr 是我刚刚概述的示例:
【问题讨论】:
-
你可以使用
$watchCollection -
不起作用。这是plunkr。 plnkr.co/edit/VLlCNj?p=preview
-
我的感觉是它正在更改对对象的引用,而 $watch 正在寻找对对象的旧引用的属性更改。不过我可能会完全离开。
-
好吧,我之前没有注意到这一点,但是您的
changeObject函数不会替换数组中的任何内容。它将您的animal变量的引用从数组中的一个对象更改为您在该函数中实例化的那个。此外,您应该首先通过在其中使用$watch函数来发布您试图解决的问题的更广泛范围。据我从 Plunker 得知,您只是将您的$scope.animals分配给$scope.result,这似乎不是很有用。
标签: javascript arrays angularjs object