Подтвердить что ты не робот

Запуск $применяется на $rootScope по сравнению с любой другой областью

Функция $apply может работать в любой области, включая $rootScope.

Есть ли случаи, когда это имеет значение, если я запускаю его в своей локальной области или я запускаю его на своем $rootScope?

Я прошу, потому что я хотел бы создать вспомогательную функцию, которая обертывает заданную функцию в $apply. Для этого мне всегда нужно проходить в области, которая является A) раздражающей и B) не простой, потому что я не обязательно имею локальную область.

Я хотел бы всегда иметь вызов моей вспомогательной функции $apply в $rootScope, но не если есть какой-то риск при этом.

4b9b3361

Ответ 1

Запуск $apply в любой области действия всегда приводит к $rootscope.$digest. Единственный случай, когда это может иметь значение, - это предоставить выражение как аргумент $apply. Выражение будет оцениваться в текущей области (по сравнению с $rootScope), но впоследствии $rootscope.$digest всегда вызывается.

Исходный код довольно ясен: rootScope.js

Нижняя линия: Если вы вызываете $apply без аргументов, это не имеет значения.

Ответ 2

Другая причина для запуска $apply в $rootScope вместо $scope обычно возникает для меня, когда мне нужно вызвать $apply в службе, которая будет использоваться разными контроллерами и, следовательно, разными областями.
В этом случае я предпочитаю вводить $rootScope в службу и называть $apply, не беспокоясь о том, какие области будут использоваться в будущем.

Ответ 3

Запуск $digest/$применяется в любой заданной области действия, который будет посещать все другие области с использованием обхода глубины:

https://github.com/angular/angular.js/blob/3967f5f7d6c8aa7b41a5352b12f457e2fbaa251a/src/ng/rootScope.js#L550-L558

Это означает, что единственное отличие состоит в том, что $digest начнется с любой $scope, на которую он был вызван на