$ watchCollection和多个表达式不起作用

时间:2016-12-25 14:48:37

标签: javascript angularjs

我有两个数组,每个数组都有布尔值,我尝试使用$ watchCollecion函数在其中一个数组中发生某些更改时显示消息但由于某种原因它不起作用。

我想看看这个example

有什么问题

控制器

  $scope.arrayCategoryA = [];
  $scope.arrayCategoryB = [];

  $scope.$watchCollection(['arrayCategoryA', 'arrayCategoryB'], function(newVal, oldVal, scope){
    console.log("something changed");
  }, true);

  $http.get("categoryA.json").success(function(data) {
     $scope.categoryA = data;
     for (var i = 0; i < $scope.categoryA.length; i++) 
     $scope.arrayCategoryA[i] = true;
  });

  $http.get("categoryB.json").success(function(data) {
     $scope.categoryB = data;
     for (var j = 0; j < $scope.categoryB.length; j++) 
     $scope.arrayCategoryB[j] = true;
  });

1 个答案:

答案 0 :(得分:2)

  

AngularJS一直有一个Scope。$ watch()函数作为观察的手段   [并作出反应]给定值的变化。使用AngularJS 1.1.4,   但是,他们添加了Scope。$ watchCollection()函数作为一种手段   观察集合中的变化(作为数组或对象)。

$ watchCollection仅适用于一个数组或对象。因此,您必须将代码更改为单个监视。

$scope.$watchCollection('arrayCategoryA', function(newVal, oldVal){
    console.log("something changed 1");
}, true);
$scope.$watchCollection('arrayCategoryB', function(newVal, oldVal){
    console.log("something changed 2");
}, true);