哪种解决方案最好。在控制器中为每个数据设置三个监视,并相应地设置不同的方法或为所有三个变量设置一个监视,然后检查哪个更改并运行指定的方法。
在事件处理的寓言中,最好是在父对象上委托事件,然后根据指定的事件委托dom的部分。如果角度允许这样观看,如何实现呢?
基本解决方案很简单,但需要三个手表:
$scope.$watch(function() {
return service.var1;
},
function callback(new,old) {
$scope.function1();
});
$scope.$watch(function() {
return service.var2;
},
function callback(new,old) {
$scope.function2();
});
$scope.$watch(function() {
return service.var3;
},
function callback(new,old) {
$scope.function3();
});
根据事件观察,第二种解决方案似乎更好,但我不知道如何确定观察元素:
$scope.$watch(function() {
return service.var1 + service.var2 + service.var3; },
function callback(new,old) {
var changed = ;//?here how to determine which variable changed
switch ( changed ) {
case 'var1' : $scope.function1();break;
case 'var2' : $scope.function2();break;
case 'var3' : $scope.function3();break; }
})
如何在Angular中实现委托给监视变量?
答案 0 :(得分:1)
我更喜欢你使用的第二种方式,但应该有$$watchGroup
<强>代码强>
$scope.$watchGroup(['service.var1', 'service.var2', 'service.var3'],
function(newVal, oldVal) {
var changed = ''
if (newVal[0] != oldVal[0])
changed = 'var1';
if (newVal[1] != oldVal[1])
changed = 'var2';
if (newVal[2] != oldVal[2])
changed = 'var3';
switch (changed) {
case 'var1':
$scope.function1();
break;
case 'var2':
$scope.function2();
break;
case 'var3':
$scope.function3();
break;
}
});
有关详细信息,请参阅已解释相同的this SO answer。