$ watch有效但不是$ watchCollection

时间:2014-03-20 15:39:28

标签: angularjs

这有效:

$scope.$watch('cities', function(){
   alert("fire");
}, true);

这项工作:

$scope.$watchCollection('[cities]', function(){
  alert("fire")
}, true);

任何想法可能出错?

$ scope.cities连接到一些复选框。

2 个答案:

答案 0 :(得分:2)

$watchCollection的文档说明会监视传递给它的object,并在对象发生变化时触发。因此,对于数组,当任何元素发生更改时会触发,但当元素内部的某些属性发生更改时,。此外,它没有采用第三个参数(如$watchobjectEquality所做的那样)。在您的情况下,对象cities可能永远不会更改引用。

但是,如果你有:

  $scope.cityList = [cities];

  $scope.$watchCollection('cityList', function () { alert('fire'); });

  // As a response to some event:
  $scope.cityList[0] = newCities;
然后观察者应该开火。

答案 1 :(得分:0)

请参阅下面的plunker

http://plnkr.co/edit/K9dD2XLzoC37UToKyQZe?p=preview

有关详细说明,请观看this