Angular $digest цикл?

Например, мы добавили выражение {{ hello }} и ангуляр создал для него функцию, которая будет отлеживать изменения. Затем мы добавили директиву ng-click и навесили обработчик. Понятно, ангуляр запускает $digest цикл, собственно, благодаря которому 2-way data binding работает. НО, процитирую:

Angular не так прост. Среда AngularJS не вызывает $digest напрямую, она вызывает функцию $scope.$apply(), которая вызывает $rootScope.digest(). И в результате digest-цикл в $rootScope поочередно посещает дочерние $scope и вызывает их digest-циклы.


Зачем запускается digest на rootScope, если там будет много вотчеров то приложение будет тормозить( или имеется ввиду что на parent scope он не трогает)?
если выше верно - то как быть с parent scope, если, допустим, есть модель в $rootScope и она может изменяться в любом контроллере?
а что если дочерних много - какая глубина будет ?
  • Вопрос задан
  • 3891 просмотр
Решения вопроса 1
miraage
@miraage
Старый прогер
Максимальная глубина будет.

Мало ли, у Вас есть сервис, который используется в 10 контроллерах в пределах одной страницы в разных view. Как им узнать об изменениях? - $rootScope.$digest().

Когда я уверен, что мне надо запустить что-то в пределах одного элемента, и это ОЧЕНЬ критично по производительности - создам кастомную директиву, в которой вместо $scope.$apply() напишу $scope.$$phase || $scope.$digest(). Проверятся лишь вотчеры в пределах одного $scope.
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы