Tutti gli ambiti in Angular sono istanze dello stesso prototipo. Come tale, il servizio globale $rootScope
è lo stesso tipo di oggetto creato per le direttive e passato alla funzione di collegamento come $scope
o per i controller.
La proprietà $root
è parte di tale prototipo e disponibile su tutti gli ambiti.
Il $rootScope
è il primo ambito creato da Angular. Tutti gli ambiti vengono creati utilizzando il metodo $new
da un ambito esistente. Quindi $rootScope
è un caso speciale perché è stato creato prima che lo angular.run()
venga eseguito sui moduli.
Quando si controlla il valore di $scope.$root
, fa riferimento alla stessa istanza fornita dal servizio di ambito radice per $rootScope
.
Pertanto;
console.log($rootScope === $scope.$root); // will print true
O come nell'esempio;
console.log($rootScope === $rootScope.$root); // will also print true
Quindi sì, le variabili nello schema radice sono le stesse indipendentemente dal riferimento all'ambito di base.
console.log($rootScope.global.flag); // prints true
console.log($scope.$root.global.flag); // prints true
console.log($rootScope.$root.global.flag); // prints true
È anche possibile accedere esplicitamente all'ambito di base in espressioni modello come questa.
<div>{{$root.someValue}}</div>
Non ci sono altri immobili come $parent
che consentono di camminare lungo la catena di ambiti, ma $parent
sarà nullo per scopi isolate (poiché non ha genitore).