Является ли $rootScope родителем самого верхнего $scope?
У меня есть общая функция, которая возвращает область верхнего элемента (документа) в моем приложении AngularJS.
function topScope() {
return angular.element(document).scope();
}
Это всегда работает, и я всегда гарантированно получаю доступ к любым подкопам, находящимся в приложении (будь то внутри контроллеров или директив).
Вот пример того, что я буду использовать для:
topScope().$emit('pageReady');
Теперь я заметил, что $rootScope также работает одинаково.
$rootScope.$emit('pageReady');
Что также работает и достигает такого же эффекта. Но поскольку $rootScope предназначен для области видимости "$ scope off the shelf" (любая созданная область наследует его методы и свойства), значит, это все равно означает, что это фактически самая верхняя область страницы? Таким образом, являясь родителем объекта области видимости, прикрепленного к документу node?
Ответы
Ответ 1
$rootScope
является родительской областью всех областей применения данного приложения AngularJS. Поскольку на одной странице можно загружать несколько приложений AngularJS (только вручную это невозможно сделать с помощью ng-app
), также возможно иметь несколько экземпляров $rootScope
в одном документе HTML.
Каждый $rootScope
привязан к элементу, где объявлен ngApp, или элемент, переданный в angular.bootstrap, как описано здесь.
Короче говоря, $rootScope
является корнем всех областей для одного приложения AngularJS, но не существует супер-root-области, которая будет служить родительской областью всех других областей для данного документа HTML.
В вашем случае использование $rootScope
может быть ОК, если у вас есть только одно приложение AngularJS во всем HTML-документе.