Разница между $rootScope и $rootScope.$root

Есть ли разница между $rootScope и $rootScope.$root?

В чем разница между

$rootScope.global.flag = true и $rootScope.$root.global.flag = true

Оба они обращаются к одной и той же переменной в rootscope?

Если да, то есть ли какая-то конкретная ситуация, когда мы должны использовать любой из них?


person Nithin Baby    schedule 22.10.2015    source источник


Ответы (1)


Все области действия в Angular являются экземплярами одного и того же прототипа. Таким образом, глобальная служба $rootScope представляет собой объект того же типа, созданный для директив и переданный в функцию связи, как $scope, или для контроллеров.

Свойство $root является частью этого прототипа и доступно во всех областях.

$rootScope — это первая область видимости, созданная Angular. Все области создаются с помощью метода $new из существующей области. Таким образом, $rootScope — это особый случай, потому что он создается до того, как angular.run() выполняется в модулях.

Когда вы проверяете значение $scope.$root, оно ссылается на тот же экземпляр, который предоставляется службой корневой области для $rootScope.

Поэтому;

console.log($rootScope === $scope.$root); // will print true

Или как в вашем примере;

console.log($rootScope === $rootScope.$root); // will also print true

Так что да, переменные в корневой области одинаковы, независимо от того, как вы ссылаетесь на корневую область.

console.log($rootScope.global.flag); // prints true
console.log($scope.$root.global.flag); // prints true
console.log($rootScope.$root.global.flag); // prints true

Вы также можете явно получить доступ к корневой области в выражениях шаблона, подобных этому.

<div>{{$root.someValue}}</div>

Существуют и другие свойства, такие как $parent, которые позволяют пройти по цепочке областей видимости, но $parent будет иметь значение null для изолированных областей (поскольку у него нет родителя).

person Reactgular    schedule 22.10.2015