正确使用范围监视许多变量

时间:2015-03-19 15:05:30

标签: angularjs watch

哪种解决方案最好。在控制器中为每个数据设置三个监视,并相应地设置不同的方法或为所有三个变量设置一个监视,然后检查哪个更改并运行指定的方法。

在事件处理的寓言中,最好是在父对象上委托事件,然后根据指定的事件委托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中实现委托给监视变量?

1 个答案:

答案 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