Después de renderizar toda la página en función de varios contextos de usuario y haber realizado varios $http
solicitudes, quiero que el usuario pueda cambiar de contexto y volver a representar todo nuevamente (reenviar todas las $http
solicitudes, etc.). Si solo redirijo al usuario a otro lugar, las cosas funcionan correctamente:
$scope.on_impersonate_success = function(response) {
//$window.location.reload(); // This cancels any current request
$location.path('/'); // This works as expected, if path != current_path
};
$scope.impersonate = function(username) {
return auth.impersonate(username)
.then($scope.on_impersonate_success, $scope.on_auth_failed);
};
Si yo uso $window.location.reload()
, algunas de las $http
solicitudes auth.impersonate(username)
que están esperando una respuesta se cancelan, por lo que no puedo usar eso. Además, el truco $location.path($location.path())
tampoco funciona (no pasa nada).
¿Hay alguna otra forma de volver a representar la página sin volver a emitir manualmente todas las solicitudes?
Respuestas:
Para el registro, para forzar angular para volver a representar la página actual, puede usar:
De acuerdo con la documentación de AngularJS :
fuente
$route.reload()
comparación con una actualización normal. Por ejemplo, una pestaña está configurada para mostrarse inicialmente al actualizar, pero cuando el método de recarga parece volver a cargar la página sin configurar la pestaña, no estoy seguro de cuál es el problema.$route
al controlador para que esto funcione.angular.js file
. Si continúa usando$routeProvider
, ahora deberá incluirangular-route.js
en su HTML:$route.reload()
reiniciará los controladores pero no los servicios. Si desea restablecer todo el estado de su aplicación, puede usar:Este es un método DOM estándar al que puede acceder inyectando el servicio $ window .
Si desea asegurarse de volver a cargar la página desde el servidor, por ejemplo, cuando está utilizando Django u otro marco web y desea un nuevo renderizado del lado del servidor, pase
true
como parámetroreload
, como se explica en los documentos . Como eso requiere interacción con el servidor, será más lento, así que hágalo solo si es necesarioAngular 2
Lo anterior se aplica a Angular 1. No estoy usando angular 2, parece que los servicios son diferentes allí, hay
Router
,Location
y elDOCUMENT
. No probé diferentes comportamientos allífuente
Para volver a cargar la página para una ruta de ruta determinada: -
fuente
Si está utilizando un enrutador ui angular, esta será la mejor solución.
fuente
Bueno, tal vez olvidó agregar "$ route" al declarar las dependencias de su controlador:
fuente
Solo para recargar todo, use window.location.reload (); con angularjs
Mira el ejemplo de trabajo
HTML
angularJS
http://jsfiddle.net/HB7LU/22324/
fuente
Si desea actualizar el controlador mientras actualiza los servicios que está utilizando, puede usar esta solución:
es decir
Esto actualizará el controlador y el HTML, también puede llamarlo Actualizar o Renderizar .
fuente
Antes de Angular 2 (AngularJs)
A través de la ruta
Si quieres recargar toda la aplicación
Angular 2+
O
fuente
La solución más fácil que pensé fue,
agregue '/' a la ruta que desea volver a cargar cada vez que regrese.
p.ej:
en lugar de lo siguiente
utilizar,
fuente
/
: O Mi ruta ahora se ve así://
Pruebe uno de los siguientes:
fuente
Obtuve este código de trabajo para eliminar el caché y volver a cargar la página
Ver
Controlador
Inyectores: $ scope, $ state, $ stateParams, $ templateCache
fuente
Utilice el siguiente código sin notificación de recarga íntima para el usuario. Representará la página.
fuente
He tenido una dura lucha con este problema durante meses, y la única solución que me funcionó es esta:
fuente
$window.location.reload()
que el OP menciona específicamente que no funciona correctamente en su caso.