javascript - not - Adjuntar funciones y datos globales a $ rootScope en la inicialización en AngularJS
$scope is not defined (3)
Como primer paso para su solución, creo que podría monitorear el evento $ routeChangeStart que se activa antes de cada cambio de ruta (o actualización de la página en su caso).
var app = angular.module(''myApp'').run([''$rootScope'', function($rootScope) {
$rootScope.$on("$routeChangeStart", function (event, next, current) {
if (!$rootScope.myBooleanProperty)) {
$location.path(''/'');
}
else {
$location.path(''/page'');
}
});
});
Debe consultar este artículo sobre la autenticación en una aplicación de una sola página. Creo que podrías trabajar algo similar.
Me gustaría tener una "función global" llamada la primera vez que ejecuto mi aplicación AngularJS, o cada vez que actualizo la página.
Esta función llamará a mi servidor con $http.get()
para obtener la información global necesaria para usar mi aplicación. Necesito acceder a $rootScope
en esta función. Después de eso, y solo después de que termine esta solicitud, estoy usando app.config
y $routeProvider.when()
para cargar el controlador bueno.
app.config([''$routeProvider'', function($routeProvider) {
$routeProvider
.when(''/'',
{
/**/
});
}]);
No quiero que la aplicación haga algo antes de que termine esta acción. Así que supongo que tengo que usar una "resolución", pero realmente no sé cómo usarla.
¿Alguna idea?
¡Gracias!
No es la mejor manera de resolver su problema, pero aquí hay una solución propuesta para su pregunta.
Cualquier cosa dentro de la run(...)
se ejecutará en la inicialización.
angular.module(''fooApp'').run([''$http'', ''$rootScope'' function($http, $rootScope) {
$http.get(...).success(function(response) {
$rootScope.somedata = response;
});
$rootScope.globalFn = function() {
alert(''This function is available in all scopes, and views'');
}
}]);
Ahora se puede activar una alerta en todas sus vistas, usando ng-click="globalFn()"
.
Tenga en cuenta que las directivas que usan un nuevo ámbito de aislamiento no tendrán acceso a estos datos si no se heredan explícitamente: $scope.inheritedGlobalFn = $rootScope.globalFn
Por favor considere esta respuesta: https://.com/a/27050497/1056679
He intentado recopilar todos los métodos posibles para resolver dependencias en el ámbito global antes de que se ejecuten los controladores reales.