sirve que para entre datos controladores comunicacion compartir javascript angularjs angularjs-scope

javascript - que - ¿Cuál es la diferencia entre $ scope. $ Root y $ rootScope?



scope para que sirve (2)

Veo en los controladores que $ scope tiene $ root, ¿qué es esto? ¿En qué se diferencia de $ rootScope que se puede inyectar en el controlador?


Como se mencionó anteriormente, $scope.$root contiene una referencia a $rootScope .

Desafortunadamente, HAY una diferencia entre usar $scope.$root y usar $rootScope :

  1. Cuando $scope ES la raíz, su propiedad $root es null
  2. $scope.$root solo se asigna en ámbitos aislados: https://github.com/angular/angular.js/blob/v1.3.6/src/ng/rootScope.js#L204

Por lo tanto, es posible que tenga una situación en la que $scope.$root sea null . Mejor use $rootScope en $rootScope lugar ...


$rootScope var que apunta al padre de todos los ámbitos y se puede inyectar en todas partes. Todos los demás ámbitos son hijos del $rootScope . Se crean a través del método $new de $rootScope lo que cada alcance hereda de $rootScope .

En la fuente angular en la definición del constructor Scope hay una línea :

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

Parece que $root var es solo un marcador de posición para this primer alcance creado - $rootScope .

Luego está esta pieza de código en el método $new :

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

Por lo tanto, la var de $root de cada elemento secundario de alcance de $rootScope es una referencia a $rootScope . Y todos los hijos de esos niños obtendrán la misma referencia a $rootScope

En mi opinión, es mejor usar $rootScope través de la inyección de dependencia, ya que es una forma explícita y general más utilizada para referirse a $rootScope