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?
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.