$ watch(Collection)不会捕获对象属性更改

时间:2014-06-05 07:56:54

标签: javascript angularjs

我在模板中有这个字符串:

<li class="list__item" ng-repeat="item in items">
  <input class="toggle" type="checkbox" ng-model="item.done">
  <label>{{ item.description }}</label>
  <button class="destroy" ng-click="remove(item)"></button>
</li>

我控制器中的js代码:

$scope.$watchCollection('items', function(newValue, oldValue) {
  cache.set($scope.items);
});

$ scope.items已定义。

当我检查一个项目时,$ watchCollection没有抓住这个变化。 我读过todo mvc source并没有找到我的错误。

错误在哪里? 感谢。

1 个答案:

答案 0 :(得分:2)

watchCollection会监视items集合中的浅层更改。这意味着只有在向items集合添加/删除元素时才会触发它。如果您希望在更改item的属性时触发手表,则必须使用watch

来自文档:

  

Shallow监视对象的属性,并在任何属性发生更改时触发(对于数组,这意味着要观察数组项;对于对象映射,这意味着要观察属性)。