Ich sehe in Controllern, dass $ Scope hat $ root, was ist das? Wie unterscheidet es sich von $ rootScope, das in den Controller injiziert werden kann?
Antwort
$rootScope
var, die auf die Eltern aller Bereiche zeigt und überall injiziert werden kann. Alle anderen Bereiche sind Kinder der $rootScope
. Sie werden über die $new
-Methode der $rootScope
erstellt, so dass jeder Bereich von der $rootScope
erbt.
In der Winkelquelle in der Definition des Scope
Konstruktor there is a line:
function Scope() {
this.$id = nextUid();
...
this['this'] = this.$root = this;
...
Es scheint, die $root
var für this
des ersten Bereichs erstellt nur ein Platzhalter ist - $rootScope
.
Weiter ist es this piece of code im $new
Methode:
$new: function(isolate) {
...
if (isolate) {
child = new Scope();
child.$root = this.$root;
...
return child;
So ist die $root
var eines jeden Anwendungsbereich Kind $rootScope
ist ein Verweis auf $rootScope
. Und alle Kinder dieser Kinder den gleichen Bezug auf $rootScope
Meiner Meinung nach bekommen es besser ist, die $rootScope
über Dependency Injection zu verwenden, da es eine explizite und insgesamt häufiger verwendete Weg ist, um das zu verweisen $rootScope
Danke :) Es hilft sicherlich –
Schöne Erklärung. Ich denke $ scope. $ Root ist da, für den einfachen Zugriff auf $ rootScope-Variablen in Templates, ohne $ rootScope in den Controller einbeziehen zu müssen. – canerbalci
@canerbalci in Winkel 1.4, Root-Bereich darf zerstört werden, verwenden Sie dies. $ Root wird auf Null nach Root-Bereich zerstört werden – Jack
Wie bereits erwähnt, enthält $scope.$root
einen Verweis auf die $rootScope
.
Leider gibt es einen Unterschied zwischen $scope.$root
und unter Verwendung von $rootScope
:
- Wenn
$scope
ist die Wurzel, seine$root
Eigenschaft istnull
$scope.$root
nur auf isolieren Bereiche zugeordnet: https://github.com/angular/angular.js/blob/v1.3.6/src/ng/rootScope.js#L204
Sie könnten also eine Situation haben, in der $scope.$root
ist null
. Bessere Verwendung $rootScope
statt ...
Das ist einer der Gründe, warum Sie nie '$ rootScope' irgendwo (zB angular-ui modals) direkt, aber verwenden Sie immer einen Kindbereich '$ rootScope. $ new();' –
Falsch. '$ root' [wird da sein] (https://github.com/angular/angular.js/blob/v1.3.6/src/ng/rootScope.js#L135) sowieso. – estus
@PetrPeller Können Sie mehr erklären oder mich zu mehr Info verweisen.Ich glaube, ich stoße auf ein Problem, das dadurch verursacht wird, dass $ rootScope in ein Modal injiziert wird. Vielen Dank. – Usagi
- 1. Was ist der Unterschied zwischen $ root und $ parent?
- 2. angular.js $ scope. $ Broadcast, $ scope. $ Emit, $ rootScope. $ Broadcast was zu verwenden?
- 3. Was ist der Unterschied zwischen `==` und `ist`?
- 4. Was ist der Unterschied zwischen:.! und: r !?
- 5. Was ist der Unterschied zwischen Difftime und '-'?
- 6. Was ist der Unterschied zwischen $ und $$?
- 7. Was ist der Unterschied zwischen Verilog! und ~?
- 8. was ist der Unterschied zwischen [[], []] und [[]] * 2
- 9. Was ist der Unterschied zwischen/* ... */und/** ... */
- 10. Was ist der Unterschied zwischen `&` und `ref`?
- 11. Was ist der Unterschied zwischen $ (...) und `...`
- 12. Was ist der Unterschied zwischen .Equals und ==
- 13. Was ist der Unterschied zwischen "$^N" und "$ +"?
- 14. Was ist der Unterschied zwischen + = und = +?
- 15. Was ist der Unterschied zwischen? und ? = Nil
- 16. Was ist der Unterschied zwischen $ (()) und Ausdruck?
- 17. Was ist der Unterschied zwischen der Variablen "cfproperty tag" und der Variablen "scope" in Coldfusion?
- 18. Mit scope = $ rootScope $ new() oder scope = {} in angluar.js Unit-Tests
- 19. Was ist der Unterschied zwischen:
- 20. Scope-Variable ist Null in $ rootScope. $ Auf
- 21. Zugriff auf $ rootScope und $ scope in `$ rootScope. $ On`
- 22. Unterschied zwischen Root-Namespace und Assemblyname
- 23. Verschachteltes Callback Scope und rootScope AngularJS
- 24. Was entspricht $ rootScope, $ scope und $ watch in Ionic 2 + Typescript?
- 25. Unterschied zwischen angular.fromJson und $ scope eval $, wenn
- 26. Was ist der Unterschied zwischen id_token und access_token in Auth0
- 27. Was ist der Unterschied zwischen index.html und index.html.erb in Rails?
- 28. Was ist der Unterschied zwischen Upstart und Supervisord?
- 29. Was ist der Unterschied zwischen os.getuid() und os.geteuid()?
- 30. Was ist der Unterschied zwischen # {Pfad} und "# {RAILS_ROOT}"
Ich bin nie über '$ Scope. $ Root' gekommen. Es kann jede benutzerdefinierte Eigenschaft sein, die auf $ scope definiert ist. – AlwaysALearner
nein ist nicht benutzerdefiniert. Sie können es in $ Bereich eines beliebigen Controllers finden –
Und eine benutzerdefinierte Eigenschaft sollte niemals mit '$' –