Ich empfehle Ihnen, die offizielle ausführliche Angular-Dokumentation für Bereiche zu lesen. Beginnen Sie mit dem Abschnitt 'Umfangshierarchien':
https://docs.angularjs.org/guide/scope
Im Wesentlichen identifizieren sowohl $ rootScope als auch $ scope bestimmte Teile des DOM, in denen
- Winkeloperationen werden ausgeführt
- Variablen, die als Teil des Bereichs $ rootScope oder $ deklariert sind, sind verfügbar
Alles, was zu $ rootScope gehört, ist global in Ihrer Angular-App verfügbar, während alles, was zu einem $ scope gehört, in dem Teil des DOM verfügbar ist, für den dieser Bereich gilt.
Das $ rootScope wird auf das DOM-Element angewendet, das das Root-Element für die Angular-App ist (daher der Name $ rootScope). Wenn Sie die Anweisung ng-app zu einem Element des DOM hinzufügen, wird dies zum Stammelement des DOM, in dem $ rootScope verfügbar ist. Mit anderen Worten, Eigenschaften usw. von $ rootScope sind in Ihrer gesamten Angular-Anwendung verfügbar.
Ein Angular $ -Bereich (und alle seine Variablen und Operationen) steht einer bestimmten Teilmenge des DOM in Ihrer Anwendung zur Verfügung. Insbesondere steht der $ scope für einen bestimmten Controller für den Teil des DOM zur Verfügung, auf den dieser bestimmte Controller angewendet wurde (unter Verwendung der ng-controller-Direktive). Beachten Sie jedoch, dass bestimmte Anweisungen, z. B. ng-repeat, bei Anwendung in einem Teil des DOM, in dem der Controller angewendet wurde, untergeordnete Bereiche des Hauptbereichs erstellen können - innerhalb desselben Controllers - ein Controller enthält nicht unbedingt nur einen Bereich.
Wenn Sie sich beim Ausführen Ihrer Angular-App den generierten HTML-Code ansehen, können Sie leicht erkennen, welche DOM-Elemente einen Bereich enthalten, da Angular die Klasse ng-scope für jedes Element hinzufügt, auf das ein Bereich angewendet wurde (einschließlich des Stammelements) der App, die das $ rootScope hat).
Übrigens ist das '$'-Zeichen am Anfang von $ scope und $ rootScope einfach eine Kennung in Angular für Dinge, die von Angular reserviert wurden.
Beachten Sie, dass die Verwendung von $ rootScope zum Teilen von Variablen usw. zwischen Modulen und Controllern im Allgemeinen nicht als bewährte Methode angesehen wird. JavaScript-Entwickler sprechen davon, die Verschmutzung des globalen Bereichs durch die gemeinsame Nutzung von Variablen zu vermeiden, da es später zu Konflikten kommen kann, wenn eine gleichnamige Variable an einer anderen Stelle verwendet wird, ohne dass der Entwickler merkt, dass sie bereits im $ rootScope deklariert ist. Die Bedeutung dieser Anwendung steigt mit der Größe der Anwendung und dem Team, das sie entwickelt. Im Idealfall enthält $ rootScope nur Konstanten oder statische Variablen, die in der gesamten App jederzeit konsistent sein sollen. Eine bessere Möglichkeit, Inhalte modulübergreifend zu teilen, ist möglicherweise die Verwendung von Diensten und Fabriken, was ein weiteres Thema ist!