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

В чем разница между $scope. $Root и $rootScope?

Я вижу в контроллерах, что $scope имеет $root, что это? Как он отличается от $rootScope, который может быть введен в контроллер?

4b9b3361

Ответ 1

$rootScope var, который указывает на родительский элемент всех областей и может быть введен во всюду. Все остальные области являются дочерними элементами $rootScope. Они создаются с помощью метода $new $rootScope, поэтому каждая область наследуется от $rootScope.

В источнике angular в определении конструктора Scope есть строка:

 function Scope() {
   this.$id = nextUid();
 ...
 this['this'] = this.$root =  this;
 ...

Кажется, что $root var является просто заполнителем для this первой созданной области - $rootScope.

Далее этот фрагмент кода в методе $new:

  $new: function(isolate) {
      ...

    if (isolate) {
      child = new Scope();
      child.$root = this.$root;
   ...
   return child;

Таким образом, $root var каждого дочернего объекта сферы $rootScope является ссылкой на $rootScope. И все дети этих детей получат одинаковую ссылку на $rootScope

По-моему, лучше использовать $rootScope через инъекцию зависимостей, потому что это явный и общий более часто используемый способ обращения к $rootScope

Ответ 2

Как упоминалось ранее, $scope.$root содержит ссылку на $rootScope.

К сожалению, существует разница между использованием $scope.$root и использованием $rootScope:

Таким образом, у вас может быть ситуация, когда $scope.$root есть null. Лучше использовать $rootScope вместо этого...