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 :
- Cuando
$scopeES la raíz, su propiedad$rootesnull -
$scope.$rootsolo 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