【问题标题】:Proper using of scope watch for many variables对许多变量正确使用范围监视
【发布时间】:2015-03-19 15:05:29
【问题描述】:

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

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

【问题讨论】:

    标签: angularjs watch


    【解决方案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,它已经解释了相同的内容。

    【讨论】:

    • 你的意思是$watchGroup,而不是$watchCollection
    猜你喜欢
    • 1970-01-01
    • 2018-12-21
    • 1970-01-01
    • 2017-06-27
    • 2017-08-03
    • 2018-02-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多