Angularjs 在作用域变量列表上应用$watch
我有一些作用域变量,比如'a1,a2,a3,a4,…an',我想对所有这些作用域变量应用$watch。是否可以在如下所示的单个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',
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){...});