2015-10-22 17 views
6

C'è qualche differenza tra $ rootScope e $ rootScope. $ Root?

Qual è la differenza tra

$ rootScope.global.flag = true e $ rootScope. $ Root.global.flag = true

fare entrambe le cose di loro accedere alla stessa variabile in rootscope?

In tal caso, esiste una situazione particolare in cui è necessario utilizzare uno di essi?

risposta

3

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).

Problemi correlati