将$ watch应用于范围变量列表

时间:2014-07-03 10:56:32

标签: angularjs

我有一些范围变量,例如' a1,a2,a3,a4,...',我想对所有这些范围变量应用$ watch。是否可以在单个手表中应用此功能功能如下图所示。

var list=['a1','a2','a3',...,'an']
for (var i=0;i<list.length;i++){
    $scope.$watch(list[i],function(){
     alert(list[i]+'changed');
    })
}

3 个答案:

答案 0 :(得分:0)

你所拥有的不是一个单独的监视功能,它实际上会为数组中的每个元素创建一个函数,是的,如果你真的想拥有一个单独的函数并且你不关心谁改变了或它的价值你可以做点什么

 $scope.$watch(function(){ 
     var list=['a1','a2','a3',...,'an'];
     values="";
     angular.forEach(list,function(item){
          values+=($scope[item])+'_';
     })
     return values;
   },function(){
       //do something here with the values

    })

如果有所有值,如果您有对象可以观察到您需要对变量执行JSON.stringify以获取其状态,则此方法有效。此解决方案仅适用于知道更改者与执行操作无关,即计算总值,比率或完整性检查应该是什么值的常量值

答案 1 :(得分:0)

使用ng-repeat时,你可以为每个元素分配一个控制器(好吧!)

如果你有这个:

<div ng-repeat="element in elements" ng-controller="ElementController"></div>

你可以这样看:

angular.module(...).controller('ElementController', function ($scope) {
    $scope.$watch('element.some_name', function (someName) {

    });
});

此控制器应该能够访问父作用域。

答案 2 :(得分:0)

您可以尝试$watchCollection

$scope.list = ['a1','a2','a3',...,'an'];
$scope.$watchCollection('list', function(newList, oldList){...});

或者只使用带有数组的常规$watch

$scope.$watch('[a1, a2,...]', function(newList, oldList){...});