如何在Angular中观看多个集合?

时间:2014-09-21 07:12:58

标签: javascript angularjs angularjs-scope

我的应用程序中有两个数组,我想观察更改:

$scope.a = [{id: 1, text: 'test a - 1'}, ...];
$scope.b = [{id: 1, text: 'test b - 1'}, ...];

function changed(){
  // notify application about changes in a or b
}

我必须在changed()a更改时调用b函数。

$scope.$watchCollection('a', changed);
$scope.$watchCollection('b', changed);

如果我在changed()a以及初始步骤中进行了更改,b回调将被触发两次。我想把两个手表合二为一,这样的东西:

$scope.$watchCollection('a, b', changed);

如何使用Angular执行此操作?

2 个答案:

答案 0 :(得分:3)

有一种叫做watchGroup的东西你可以用它来实现这个目的,但不幸的是它几乎没用,因为它只是浅表。

您可以使用观察者功能返回您的对象

$scope.$watch(function(){ //Or even try this with watchCollection
     return ['a','b'].map(angular.bind($scope, $scope.$eval));
  }, function(newV){
      console.log(newV);
  },true);

您可以改为 create a custom watcher for your convenience as i had mentioned in another answer 并执行此类操作。

$scope.deepWatchGroup(['a','b'],function(newV){
  console.log(newV);
});

答案 1 :(得分:1)

使用$scope. $watch('a+b', change)。您可以添加任意数量的变量来观看