Ako znovu načítať alebo vykresliť celú stránku pomocou AngularJS

Po vykreslení celej stránky na základe niekoľkých používateľských kontextov a po vykonaní niekoľkých požiadaviek $http chcem, aby používateľ mohol prepnúť kontext a znovu všetko vykresliť (opätovné odoslanie všetkých požiadaviek $http atď.). Ak používateľa len presmerujem niekam inam, všetko funguje správne:

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

Ak použijem $window.location.reload(), tak sa zrušia niektoré $http požiadavky na auth.impersonate(username), ktoré čakajú na odpoveď, takže to nemôžem použiť. Takisto nefunguje ani hack $location.path($location.path()) (nič sa nestane).

Existuje nejaký iný spôsob, ako znovu vykresliť stránku bez toho, aby som musel ručne znova vystaviť všetky požiadavky?

Riešenie

Ak chcete prinútiť angular, aby znovu vykreslil aktuálnu stránku, môžete použiť:

$route.reload();

Podľa AngularJS dokumentácia:

Spôsobí, že služba $route znovu načíta aktuálnu trasu, aj keď sa $location nezmenila.

V dôsledku toho ngView vytvorí nový scope, prestaví kontrolér.

Komentáre (10)

Na opätovné načítanie stránky pre danú trasu :-

$location.path('/path1/path2');
$route.reload();
Komentáre (1)

Možno ste zabudli pridať "$route" pri deklarovaní závislostí vášho Controllera:

app.controller('NameCtrl', ['$scope','$route', function($scope,$route) {   
   // $route.reload(); Then this should work fine.
}]);
Komentáre (0)