2015-10-13 3 views
3

Я работал над угловым проектом, который унаследовал, и я не могу связаться с автором. Там это часы выражение я не уверен, и мне было интересно, если кто-то может помочь мне понять код:

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

Что меня смущает эта строка кода: newVal !== oldVal. Любая идея, почему нужна такая проверка?

+0

Не знаком с '$ watch' но это не просто проверка, изменилось ли значение? – MinusFour

ответ

5

Метод области видимости всегда будет выполнять обратный вызов как минимум после. В первый раз это означает, что новые и старые значения одинаковы.

$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. Часы позвонят с каждым дайджестом, но может быть это значение не изменяется
  3. Так сопрягать старое значение с новым значением и вызвать метод, если только есть какие-либо изменения
Смежные вопросы