2015-10-13 54 views
3

我一直在研究一个我继承的角项目,我无法联系原作者。目前这款腕表表达我不知道的,我想知道,如果有人可以帮助我理解代码:

$scope.$watch(calculator.value, function(newVal, oldVal) { 
    if(newVal !== oldVal) { 
     i = newVal; 
     updateCalculation(); 
    } 
}); 

什么困惑我的是这行代码:newVal !== oldVal。任何想法为什么需要这样的检查?

+0

不熟悉'$ watch'

  • 所以匹配旧值与新值并调用该方法,但是不是只是检查值是否改变? – MinusFour

  • 回答

    5

    作用域的$watch方法将始终执行回调至少一次。第一次它的新旧值是一样的。

    $scope.$watch(calculator.value, function(newVal, oldVal) { 
        if(newVal === oldVal) { 
         console.log('First time watcher is executed'); 
        } 
        if(newVal !== oldVal) { 
         console.log('Watcher called because values changed.'); 
        } 
    }); 
    

    您给出的示例指出,只有当值发生更改时,它才会执行updateCalculations()。不是第一次观察者被调用。

    +1

    这似乎是唯一正确的答案。在做了更多的读操作之后,我发现只有当值已被更改时,侦听器函数才会在$ digest循环中执行,但它也会在启动时执行一次。 – user2352164

    0

    即使值没有改变,$ watch也会在$ digest循环的每一回合中被调用。所以我只能假设updateCalculation()只应该在值改变时才被调用。

    0
    1. 在范围上有一个值,如 $ scope.calculator.value = 0;
    2. 观看时与每一个消化呼叫,但可能是该值未改变,如果只是有任何改变