Запуск $применяется на $rootScope по сравнению с любой другой областью
Функция $apply
может работать в любой области, включая $rootScope
.
Есть ли случаи, когда это имеет значение, если я запускаю его в своей локальной области или я запускаю его на своем $rootScope
?
Я прошу, потому что я хотел бы создать вспомогательную функцию, которая обертывает заданную функцию в $apply
. Для этого мне всегда нужно проходить в области, которая является A) раздражающей и B) не простой, потому что я не обязательно имею локальную область.
Я хотел бы всегда иметь вызов моей вспомогательной функции $apply
в $rootScope
, но не если есть какой-то риск при этом.
Ответы
Ответ 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, на которую он был вызван на