url - example - log in angularjs
Cómo enrutar sin una plantillaUrl? (2)
Estoy escribiendo la solución basada en la respuesta ya aceptada y el problema github mencionado en sus comentarios.
El enfoque que estoy usando es un parámetro de resolve
en $routeProvider
. En mi caso, estaba tratando de crear una buena solución para cerrar sesión en mi aplicación, cuando el usuario va / cierra la sesión .
Código de ejemplo de $routeProvider
:
app.config([''$routeProvider'', function ($routeProvider) {
$routeProvider.
...
when(''/logout'', {
resolve: {
logout: [''logoutService'', function (logoutService) {
logoutService();
}]
},
}).
...
}]);
En la parte de resolución, especifique un servicio (fábrica) por nombre y luego tendrá que llamarlo. Aún así es la mejor solución.
Para completar el ejemplo, presento mi logoutService
:
angular.module(''xxx'').factory(''logoutService'', function ($location, Auth) {
return function () {
Auth.setUser(undefined);
$location.path(''/'');
}
});
¡Funciona genial!
De acuerdo. Tengo una configuración de url para desconectar a un usuario. En el servidor, no hay html. La sesión en el servidor simplemente se destruye, y luego se redirige al usuario a una dirección.
Esto funciona bien con html simple, pero con Angular tengo problemas. He estado enrutando todas las rutas principales usando $routeProvider.when(''/foo'', {templateUrl: ''/foo.html'', controller: ''Ctrl''})
y eso funciona bien para las rutas con plantillas normales ... sin embargo, si hay no hay plantilla, no funcionará
Entonces, ¿cómo apoyo la ruta /logout
de /logout
de la misma manera que la anterior, cuando no hay una plantilla html?
Una solución alternativa es usar template
lugar de templateUrl
. De los documentos angulares :
template - {string =} - plantilla html como una cadena que debería ser utilizada por las directivas ngView o ngInclude. esta propiedad tiene prioridad sobre templateUrl.
Esto se puede usar de la siguiente manera:
$routeProvider.when("/foo", {template: " ", controller: "Ctrl"});
Nota: debe usar " "
lugar de una cadena vacía ""
porque Angular usa una verificación if (template)
antes de disparar el controlador, y una cadena vacía se evalúa como falsa.
- EDITAR -
Una mejor forma de hacerlo es usar el mapa de resolve
. Ver los documentos angulares :
resolve - {Object. =} - Un mapa opcional de dependencias que debe ser inyectado en el controlador.
Esto se puede usar así:
$routeProvider.when(''/foo'', {resolve: {redirect: ''RedirectService''}});
Nota: Lo cambié de "Ctrl" a "RedirectService", porque lo que describes en la pregunta no es realmente un "controlador" en el sentido angular. No configura el alcance de una vista. En cambio, se parece más a un servicio, que termina redirigiendo.