Quelle est la différence entre $ scope. $ Root et $ rootScope?

Je vois dans les contrôleurs que $ scope a $ root, c'est quoi? Comment est-il différent de $ rootScope qui peut être injecté dans le contrôleur?

$rootScope var qui pointe vers le parent de toutes les étendues et peut être injecté partout. Toutes les autres étendues sont des enfants de $rootScope . Ils sont créés via la $new méthode $rootScope chaque portée hérite de $rootScope .

Dans la source angulaire dans la définition du constructeur Scope il y a une ligne :

  function Scope() { this.$id = nextUid(); ... this['this'] = this.$root = this; ... 

Il semble que $root var $root soit juste un espace réservé pour la première portée créée – $rootScope .

Ensuite, il y a ce code dans la $new méthode:

  $new: function(isolate) { ... if (isolate) { child = new Scope(); child.$root = this.$root; ... return child; 

Donc, la $rootScope $root de chaque champ enfant de $rootScope est une référence à $rootScope . Et tous les enfants de ces enfants obtiendront la même référence à $rootScope

À mon avis, il est préférable d'utiliser le $rootScope via l'injection de dépendance, car il s'agit d'une manière explicite et généralement plus fréquemment utilisée de se référer à $rootScope

Comme mentionné précédemment, $scope.$root $rootScope contient une référence à $rootScope .

Malheureusement, il y a une différence entre l'utilisation de $scope.$root $rootScope et using $rootScope :

  1. Lorsque $scope IS est la racine, sa propriété $root est null
  2. $scope.$root n'est attribué que sur les étendues isolées: https://github.com/angular/angular.js/blob/v1.3.6/src/ng/rootScope.js#L204

Vous pourriez donc avoir une situation où $scope.$root est null . Mieux utiliser $rootScope place …