Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/angularjs/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Angularjs 在作用域变量列表上应用$watch_Angularjs - Fatal编程技术网

Angularjs 在作用域变量列表上应用$watch

Angularjs 在作用域变量列表上应用$watch,angularjs,Angularjs,我有一些作用域变量,比如'a1,a2,a3,a4,…an',我想对所有这些作用域变量应用$watch。是否可以在如下所示的单个watch函数中应用它 var list=['a1','a2','a3',...,'an'] for (var i=0;i<list.length;i++){ $scope.$watch(list[i],function(){ alert(list[i]+'changed'); }) } var list=['a1','a2','a3',

我有一些作用域变量,比如'a1,a2,a3,a4,…an',我想对所有这些作用域变量应用$watch。是否可以在如下所示的单个watch函数中应用它

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

对于(var i=0;i您所拥有的,没有一个单独的watch函数,它实际上会为数组中的每个元素创建一个函数,是的,如果您真的想要拥有一个函数,并且您不关心谁更改了它或它的值,那么现在应该可以这样做了

 $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以获取其状态。此外,此解决方案仅适用于知道更改的对象与要执行的操作无关的情况,即在使用ng时计算应为常量的值的总数、比率或健全性检查-重复,您可以为每个元素指定一个控制器(很好!)

如果您有:

<div ng-repeat="element in elements" ng-controller="ElementController"></div>
此控制器仍应能够访问父作用域。

您可以尝试:

或者只需将常规的
$watch
与数组一起使用:

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

您是否将其与ng-repeat一起使用?是的,我将其与ng-repeat一起使用。您的ans是正确的。但是,如果我们要检查哪个元素的值已更改,以及是否要显示同一元素的值新值和旧值,该怎么办?
$watchCollection
将新值和旧值作为参数传递给侦听器函数,以便您可以比较m、 但这不是一个理想的解决方案不,我想不是。它只是告诉你newValue==oldValue与否。但是如果你想跟踪已更改的元素呢?如果你能提供帮助,那就太好了。你可以比较它,侦听器函数应该作为第二个参数传递(不是第一个参数)但它只能比较两个数组,而不能比较其中的任何一个元素array@micronyks,两个方法中的侦听器函数都将获取新列表和旧列表作为参数,因此您可以迭代这两个列表并比较它们。
$scope.list = ['a1','a2','a3',...,'an'];
$scope.$watchCollection('list', function(newList, oldList){...});
$scope.$watch('[a1, a2,...]', function(newList, oldList){...});