Qual è la differenza tra $ scope. $ Root e $ rootScope?

Vedo nei controller che $ scope ha $ root, che cos’è? In che cosa differisce da $ rootScope che può essere iniettato nel controller?

$rootScope var che punta al genitore di tutti gli ambiti e può essere iniettato ovunque. Tutti gli altri ambiti sono figli di $rootScope . Vengono creati tramite il $new metodo $rootScope del $rootScope quindi ogni ambito eredita da $rootScope .

Nella sorgente angular nella definizione del costruttore Scope c’è una linea :

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

Sembra che $root var var sia solo un segnaposto per this del primo scope creato – $rootScope .

Poi c’è questo pezzo di codice nel $new metodo $new :

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

Quindi la var $root di ogni scope child di $rootScope è un riferimento a $rootScope . E tutti i bambini di quei bambini avranno lo stesso riferimento a $rootScope

Secondo me è meglio usare $rootScope tramite dependency injection perché è un modo esplicito e generale più frequentemente usato di riferirsi al $rootScope

Come menzionato in precedenza, $scope.$root contiene un riferimento a $rootScope .

Sfortunatamente, c’è una differenza tra l’utilizzo di $scope.$root e l’utilizzo di $rootScope :

  1. Quando $scope IS è root, la sua proprietà $root è null
  2. $scope.$root è assegnato solo su ambiti isolati: https://github.com/angular/angular.js/blob/v1.3.6/src/ng/rootScope.js#L204

Quindi potresti avere una situazione in cui $scope.$root è null . Meglio usare $rootScope invece …