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
$scope
ES la raíz, su propiedad$root
esnull
-
$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