2012-11-30 9 views
16

Mam wspólną funkcję, która zwraca zakres najwyższego elementu (dokumentu) w mojej aplikacji AngularJS.

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

To zawsze działa, a ja zawsze zagwarantowane mieć dostęp do wszelkich subscopes położonych w obrębie aplikacji (czy to kontrolery wewnątrz lub dyrektywy).

Oto przykład tego, co chciałbym go używać do:

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

Teraz zauważyłem, że $ rootScope również działa w ten sam sposób.

$rootScope.$emit('pageReady'); 

Który również działa i osiąga ten sam efekt. Ale ponieważ $ rootScope ma być zasięgiem "$ scope off the shelf" (każdy stworzony zakres dziedziczy jego metody i właściwości), to czy nadal oznacza to, że jest to w rzeczywistości najwyższy zakres strony? Zatem będąc rodzicem obiektu zasięgu dołączonego do węzła dokumentu?

+0

Tak, RootScope jest rodzicem wszystkich zakresów. – ganaraj

Odpowiedz

23

$rootScope to zakres nadrzędny wszystkich zakresów w danej aplikacji AngularJS. Ponieważ możliwe jest ładowanie wielu aplikacji AngularJS na jednej stronie (tylko ręcznie, nie można tego zrobić przy użyciu ng-app), możliwe jest również posiadanie wielu instancji $rootScope w jednym dokumencie HTML.

Każdy $rootScope jest „przypisane” do albo z elementu, w którym ngApp została zadeklarowana lub element przechodzi do angular.bootstrap jak opisano here.

W skrócie, $rootScope jest źródłem wszystkich zakresów dla jednej aplikacji AngularJS, ale nie ma zasięgu "super-root", który mógłby służyć jako nadrzędny zakres wszystkich innych zakresów dla danego dokumentu HTML.

W twoim przypadku użycie $rootScope może być OK, jeśli masz tylko jedną aplikację AngularJS w całym dokumencie HTML.

+7

To jest poprawne. Uwaga boczna, jeśli masz dwie $ rootScope, ponieważ masz dwie aplikacje i potrzebujesz ich do komunikowania się ze sobą, możesz użyć okna $ ... Wygląda to na skrzynkę krawędzi, ale warto o tym wspomnieć. –

Powiązane problemy