2012-11-30 9 views
16

Ho una funzione condivisa che restituisce l'ambito dell'elemento più in alto (documento) nella mia applicazione AngularJS.

function topScope() { 
    return angular.element(document).scope(); 
} 

Questo funziona sempre e sono sempre garanzia di avere accesso a qualsiasi subscopes situati all'interno dell'applicazione (che si tratti di controllori all'interno o direttive).

Ecco un esempio di quello che vorrei usarlo per:

topScope().$emit('pageReady'); 

Ora ho notato che $ rootScope funziona anche nello stesso modo.

$rootScope.$emit('pageReady'); 

Che funziona anche e raggiunge lo stesso effetto. Ma poiché $ rootScope è progettato per essere l'ambito "$ scope off the shelf" (qualsiasi ambito creato erediterà i suoi metodi e proprietà), allora questo vuol dire che è in realtà l'ambito più in alto della pagina? Quindi essere il genitore dell'oggetto scope collegato al nodo del documento?

+0

Sì, RootScope è il genitore di tutti gli ambiti. – ganaraj

risposta

23

$rootScope è un ambito padre di tutti gli ambiti in una determinata applicazione AngularJS. Poiché è possibile eseguire il bootstrap di più applicazioni AngularJS su una pagina (solo manualmente, non è possibile farlo utilizzando ng-app) è anche possibile avere più istanze $rootScope in un documento HTML.

Ogni $rootScope è "collegato" all'elemento in cui è stato dichiarato ngApp o l'elemento è passato a angular.bootstrap come descritto here.

In breve, lo $rootScope è una radice di tutti gli ambiti per un'applicazione AngularJS ma non esiste un ambito "super-root" che possa fungere da ambito padre di tutti gli altri ambiti per un determinato documento HTML.

Nel tuo caso l'utilizzo dello $rootScope potrebbe essere OK se hai una sola applicazione AngularJS nell'intero documento HTML.

+7

Questo è corretto. Nota a margine, se hai due $ rootScope perché hai due app e hai bisogno che parlino tra loro, puoi usare $ window ... Sembra un caso limite, ma vale la pena menzionarlo. –

Problemi correlati