$watch(Collection)不能捕捉对象属性的变化

$watch(Collection) doesn't catch object property changes

本文关键字:对象 属性 变化 不能 watch Collection      更新时间:2023-09-26

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

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

美元范围。项被定义

当我检查一个项目时,$watchCollection没有捕捉到这个变化。我阅读了todo mvc源代码,没有发现我的错误。

错误在哪里?谢谢。

watchCollection观察items集合的浅变化。这意味着只有当元素被添加/删除到items集合时,它才会触发。如果你想让手表在你改变item的属性时开火,你必须使用watch

From the docs:

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