log example create crear con auth autenticacion url angularjs logout

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.