javascript - variable - rootscope between controllers
La variable AngularJS $ rootScope existe, pero no es accesible (2)
Establecí una variable $ rootScope en uno de mis módulos y ahora quiero acceder a esa misma $ raíz de raíz en otro módulo. Hasta ahora puedo ver que en ambos módulos la variable se ha configurado correctamente, pero cuando intento acceder a la variable en $ rootScope, solo me sale indefinido.
¿Cómo puedo acceder a esta variable sin hacer una solución de fábrica / servicio? La variable es realmente simple y $ rootScope debería ser suficiente para lo que necesito. He puesto un código de muestra genérico a continuación para ilustrar el problema:
file1.js
var app = angular.module(''MyApp1'', []);
app.controller(''Ctrl1'', [''$scope'', ''$rootScope'', function($scope, $rootScope) {
$scope.myFunc = function() {
$rootScope.test = 1;
}
}
file2.js
var app = angular.module(''MyApp2'', []);
app.controller(''Ctrl2'', [''$scope'', ''$rootScope'', function($scope, $rootScope) {
$scope.need_to_access_this = $rootScope.test; // undefined
console.log($rootScope); // returns JS object w/ test property set to 1
}
En Ctrl1
el valor $ rootScope.test se establece dentro de $ scope.myFunc.
El problema es que no está llamando a esa función, por lo que la propiedad de test
en $ rootScope nunca se establece.
$scope.myFunc();
llamar a $scope.myFunc();
en Ctrl1
o set $rootScope.test = 1;
dirrectly en el controlador:
app.controller(''Ctrl1'', [''$scope'', ''$rootScope'', function($scope, $rootScope) {
$scope.myFunc = function() {
$rootScope.test = 1;
};
$scope.myFunc();
}
o
app.controller(''Ctrl1'', [''$scope'', ''$rootScope'', function($scope, $rootScope) {
$rootScope.test = 1;
}
EDITAR:
Las sugerencias anteriores siguen siendo válidas, por lo tanto, debe llamar a myFunc ().
Pero el problema con su código es que Ctrl1
pertenece a MyApp1
y Ctrl2
pertenece a MyApp2
.
Cada aplicación tiene un alcance de raíz único ( documentos aquí )
Deberá crear Ctrl2
como controlador de MyApp1
:
angular.module(''MyApp1'')
.controller(''Ctrl2'', [''$scope'', ''$rootScope'', function($scope, $rootScope) {
$scope.need_to_access_this = $rootScope.test; // undefined
console.log($rootScope); // returns JS object w/ test property set to 1
}]);
Simplemente me quedé atrapado en el mismo problema cuando descubrí que había definido esas propiedades para $ rootScope antes de que se carguen los controladores o los servicios. Entonces, lo que hice fue establecer valores iniciales cuando se ejecuta la aplicación. En tu caso, será como:
app.run(function($rootScope){
$rootScope.test="variable";
})
`