Все области действия в 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