是否有一种方法可以使用$watch订阅多个对象上的事件
E.g.
$scope.$watch('item1, item2', function () { });
是否有一种方法可以使用$watch订阅多个对象上的事件
E.g.
$scope.$watch('item1, item2', function () { });
当前回答
从AngularJS 1.1.4开始,你可以使用$watchCollection:
$scope.$watchCollection('[item1, item2]', function(newValues, oldValues){
// do stuff here
// newValues and oldValues contain the new and respectively old value
// of the observed collection array
});
这里是Plunker的例子
文件在这里
其他回答
$watch的第一个参数可以是角表达式或函数。请参阅有关$scope.$watch的文档。它包含了很多关于$watch方法如何工作的有用信息:何时调用watchExpression, angular如何比较结果等。
$watch的第一个参数也可以是一个函数。
$scope.$watch(function watchBothItems() {
return itemsCombinedValue();
}, function whenItemsChange() {
//stuff
});
如果你的两个组合值很简单,第一个参数通常只是一个角度表达式。例如,firstName和lastName:
$scope.$watch('firstName + lastName', function() {
//stuff
});
从AngularJS 1.1.4开始,你可以使用$watchCollection:
$scope.$watchCollection('[item1, item2]', function(newValues, oldValues){
// do stuff here
// newValues and oldValues contain the new and respectively old value
// of the observed collection array
});
这里是Plunker的例子
文件在这里
您可以使用$watchGroup中的函数来选择范围内对象的字段。
$scope.$watchGroup(
[function () { return _this.$scope.ViewModel.Monitor1Scale; },
function () { return _this.$scope.ViewModel.Monitor2Scale; }],
function (newVal, oldVal, scope)
{
if (newVal != oldVal) {
_this.updateMonitorScales();
}
});
Angular在1.3版引入了$watchGroup,用它我们可以用一个$watchGroup块来监视多个变量 $watchGroup将数组作为第一个参数,我们可以在其中包含所有要观察的变量。
$scope.$watchGroup(['var1','var2'],function(newVals,oldVals){
console.log("new value of var1 = " newVals[0]);
console.log("new value of var2 = " newVals[1]);
console.log("old value of var1 = " oldVals[0]);
console.log("old value of var2 = " oldVals[1]);
});