Ниже я понимаю, как происходит привязка в angularJS. Было бы здорово, если бы эксперты могли предоставить отзывы/комментарии.
<div ng-controller="ctrlA">
{{myvar}}
{{anothervar}}
</div>
$scope.watch( function (scope) {
return scope.anothervar;
} , function (oldValue, newValue) {
// code to manupilate HTML with new value!!
});
$scope.watch( function (scope) {
return scope.myVar;
} , function (oldValue, newValue) {
// code to manipulate HTML with new value!!
});
Как только angularJS встречает {{myVar}} (и {{anothervar}}), внутри создается наблюдатель (для каждой переменной). Этот наблюдатель создан для $scope контроллера 'ctrlA'.
Всякий раз, когда функции вызываются в пределах $timeout, ng-click и т. д., они встроены в $scope.apply(). После выполнения вашей функции (которая может изменить некоторые переменные области видимости) $apply вызовет дайджест в rootScope. Это синхронизирует переменные в приложении с пользовательским интерфейсом!
Когда вызывается $scope.digest, он выполняет итерацию по всем наблюдателям для этой области. Затем он получает текущее значение переменной и проверяет, изменилось ли оно. Если он изменился, он вызывает обработчик наблюдателя (который изменяет html, чтобы отразить новое значение!).
У меня есть вопрос. Есть ли в хранилище angularJS какая-то карта ключей (или какая-то структура данных) для каждой области, которая содержит ссылку на наблюдателя и текущее значение для этого наблюдателя? Что-то вроде:
watch ref (for myvar) -> current value (of myvar)
watch ref (for anothervar) -> current value (of anothervar)