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

Proper using of scope watch for many variables

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

寓言事件处理,最好是在父对象上委托事件,然后根据指定的事件委托dom的部分。如果angular允许这样观看,如何实现?

基本解决方案很简单,但需要三个手表:

$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 中实现对监视变量的委托?

我更喜欢你使用的第二种方式,但应该有 $$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;
    }
});

有关更多信息,请参阅 ,其中解释相同。