309 votes

Comment recharger ou rendre à nouveau la page entière à l'aide d'AngularJS ?

Après avoir rendu la page entière sur la base de plusieurs contextes d'utilisateur et après avoir fait plusieurs $http je veux que l'utilisateur puisse changer de contexte et tout restituer à nouveau (en renvoyant toutes les demandes d $http demandes, etc). Si je redirige simplement l'utilisateur ailleurs, les choses fonctionnent correctement :

$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 j'utilise $window.location.reload() alors certains des $http demandes sur auth.impersonate(username) qui sont en attente d'une réponse sont annulées, donc je ne peux pas utiliser ça. De plus, le hack $location.path($location.path()) ne fonctionne pas non plus (rien ne se passe).

Existe-t-il un autre moyen de rendre à nouveau la page sans relancer manuellement toutes les requêtes ?

0 votes

Comme le dit Alvaro Joao ci-dessous, vous devez utiliser angular-route.js pour que cela fonctionne. bennadel.com/blog/

0 votes

Duplicata possible de AngularJs : Rechargement de la page

9voto

Vaibs Points 1355

Pour tout recharger, utilisez window.location.reload() ; avec angularjs.

Consultez l'exemple de travail

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();}
}

http://jsfiddle.net/HB7LU/22324/

7voto

Saurabh Sarathe Points 136

Si vous souhaitez rafraîchir le contrôleur tout en rafraîchissant les services que vous utilisez, vous pouvez utiliser cette solution :

  • Injecter $state

c'est-à-dire

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});
}

Cela va rafraîchir le contrôleur et le HTML aussi, vous pouvez l'appeler Rafraîchir ou re-rendre .

7voto

Yamen Ashraf Points 307

Essayez l'une des méthodes suivantes :

$route.reload(); // don't forget to inject $route in your controller
$window.location.reload();
location.reload();

6voto

Thilina Sampath Points 1473

Avant Angular 2 ( AngularJs )

Par la route

$route.reload();

Si vous voulez recharger toute l'application

$window.location.reload();

Angular 2

import { Location } from '@angular/common';

constructor(private location: Location) {}

ngOnInit() {  }

load() {
    this.location.reload()
}

Ou

constructor(private location: Location) {}

ngOnInit() {  }

Methods (){
    this.ngOnInit();
}

5voto

Diode Points 565

La solution la plus simple que j'ai trouvée était,

ajoutez '/' à la route qui doit être rechargée à chaque fois que vous revenez.

eg :

au lieu de ce qui suit

$routeProvider
  .when('/About', {
    templateUrl: 'about.html',
    controller: 'AboutCtrl'
  })

utiliser,

$routeProvider
  .when('/About/', { //notice the '/' at the end 
    templateUrl: 'about.html',
    controller: 'AboutCtrl'
  })

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X