2015-01-28 2 views
1

Я пытался понять функцию $ watch на объекте $ scope. Это выглядит довольно прямолинейно, но то, что я не понимаю, - это почему (при загрузке страницы) функция прослушивателя выполняется, когда я передаю не существующую переменную объекта $ scope в функции значения.

$scope.$watch ('nonExistingVariableIdentifier', function() { console.log('Variable value changed'); }); 

Я что-то не хватает?

ответ

3

Часы работают, когда они созданы.

Полное использование $ вахты:

$scope.$watch("nonExistantVariable", function(newValue, oldValue) { 
    if (newValue == oldValue) { 
     // First run 
    } 
    else { 
     // After First run 
    } 
}) 

Это правильный способ различать инициализации и фактического изменения.

После того, как наблюдатель зарегистрирован в области видимости, слушатель fn вызывается асинхронно (через $ evalAsync) для инициализации наблюдателя. В редких случаях это нежелательно, потому что слушатель вызывается, когда результат watchExpression не изменяется. Чтобы обнаружить этот сценарий в слушателе fn, вы можете сравнить newVal и oldVal. Если эти два значения идентичны (===), то слушатель вызывается из-за инициализации.

от угловой JS Документах для $ смотреть - Docs

+0

Большое спасибо :) –