Angular $ scope。$ watch newVal!== oldVal

时间:2015-10-13 14:30:41

标签: javascript angularjs

我一直致力于我继承的一个有角度的项目,我无法联系原作者。有这样的表达我不确定,我想知道是否有人可以帮助我理解代码:

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

令我困惑的是这行代码:newVal !== oldVal。知道为什么需要这样的检查吗?

3 个答案:

答案 0 :(得分:7)

范围的$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 :(得分:0)

即使值未发生变化,也会在$ digest循环的每个回合调用$ watch。所以我只能假设只有在值发生变化时才会调用updateCalculation()。

答案 2 :(得分:0)

  1. 范围内有一个值 $ scope.calculator.value = 0;
  2. Watch会调用每个摘要,但可能会更改此值
  3. 因此,将旧值与新值匹配,如果只有任何更改,则调用方法