javascript - div - Cómo volver a cargar o volver a renderizar toda la página utilizando AngularJS
refresh div angular 4 (13)
Después de representar toda la página en función de varios contextos de usuario y de haber realizado varias solicitudes de $http
, quiero que el usuario pueda cambiar de contexto y volver a renderizar todo (reenviando todas las solicitudes de $http
, etc.). Si simplemente redirecciono 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 uso $window.location.reload()
, entonces algunas de las solicitudes $http
en auth.impersonate(username)
que están esperando una respuesta se cancelan, por lo que no puedo usar eso. Además, el hack $location.path($location.path())
tampoco funciona (no pasa nada).
¿Hay otra forma de volver a representar la página sin emitir manualmente todas las solicitudes de nuevo?
Bueno, tal vez olvidó agregar "$ ruta" al declarar las dependencias de su controlador:
app.controller(''NameCtrl'', [''$scope'',''$route'', function($scope,$route) {
// $route.reload(); Then this should work fine.
}]);
He tenido una dura lucha con este problema durante meses, y la única solución que me funcionó es la siguiente:
var landingUrl = "http://www.ytopic.es"; //URL complete
$window.location.href = landingUrl;
Intenta lo siguiente:
$route.reload(); // don''t forget to inject $route in your controller
$window.location.reload();
location.reload();
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
$routeProvider
.when(''/About'', {
templateUrl: ''about.html'',
controller: ''AboutCtrl''
})
utilizar,
$routeProvider
.when(''/About/'', { //notice the ''/'' at the end
templateUrl: ''about.html'',
controller: ''AboutCtrl''
})
Obtuve este código de trabajo para eliminar el caché y volver a cargar la página
Ver
<a class="btn" ng-click="reload()">
<i class="icon-reload"></i>
</a>
Controlador
Inyectores: $ scope, $ state, $ stateParams, $ templateCache
$scope.reload = function() { // To Reload anypage
$templateCache.removeAll();
$state.transitionTo($state.current, $stateParams, { reload: true, inherit: true, notify: true });
};
Para el registro, para forzar a angular a volver a renderizar la página actual, puede usar:
$route.reload();
Según la documentation AngularJS:
Hace que el servicio $ route recargue la ruta actual incluso si $ location no ha cambiado.
Como resultado de eso, ngView crea un nuevo alcance, reinstala el controlador.
Para volver a cargar la página para una ruta determinada:
$location.path(''/path1/path2'');
$route.reload();
Si desea actualizar el controlador al mismo tiempo que actualiza los servicios que está utilizando, puede utilizar esta solución:
- Inyectar $ estado
es decir
app.controller(''myCtrl'',[''$scope'',''MyService'',''$state'', function($scope,MyService,$state) {
//At the point where you want to refresh the controller including MyServices
$state.reload();
//OR:
$state.go($state.current, {}, {reload: true});
}
Esto actualizará el controlador y el HTML, así que puede llamarlo Actualizar o Volver a generar .
Si está utilizando un enrutador ui angular, esta será la mejor solución.
$scope.myLoadingFunction = function() {
$state.reload();
};
Solo para recargar todo, use window.location.reload (); con angularjs
Echa un vistazo a ejemplo de trabajo
HTML
<div ng-controller="MyCtrl">
<button ng-click="reloadPage();">Reset</button>
</div>
angularJS
var myApp = angular.module(''myApp'',[]);
function MyCtrl($scope) {
$scope.reloadPage = function(){window.location.reload();}
}
Utilice el siguiente código sin una notificación de recarga íntima para el usuario. Se renderizará la página.
var currentPageTemplate = $route.current.templateUrl;
$templateCache.remove(currentPageTemplate);
$window.location.reload();
$route.reload()
reinicializará los controladores pero no los servicios. Si desea restablecer todo el estado de su aplicación, puede utilizar:
$window.location.reload();
Este es un método estándar de DOM 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á usando Django u otro marco web y desea una nueva representación del lado del servidor, pase true
como parámetro para reload
, como se explica en la documentación . Como eso requiere interacción con el servidor, será más lento, así que hágalo solo si es necesario
Angular 2
Lo anterior se aplica a Angular 1. No estoy usando Angular 2, parece que los servicios son diferentes allí, hay Router
, Location
y el DOCUMENT
. No probé diferentes comportamientos allí
Antes de Angular 2 (AngularJs)
Por la ruta
$route.reload();
Si quieres volver a cargar la aplicación completa.
$window.location.reload();
Angular 2+
import { Location } from ''@angular/common'';
constructor(private location: Location) {}
ngOnInit() { }
load() {
this.location.reload()
}
O
constructor(private location: Location) {}
ngOnInit() { }
Methods (){
this.ngOnInit();
}