Po renderowaniu całej strony w oparciu o kilka kontekstów użytkownika i po złożeniu kilku $http
żądań chcę, aby użytkownik mógł przełączać konteksty i ponownie renderować wszystko ponownie (ponownie wysyłać wszystkie $http
żądania itp.). Jeśli po prostu przekieruję użytkownika w inne miejsce, wszystko działa poprawnie:
$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);
};
Jeśli użyję $window.location.reload()
, niektóre z $http
żądań auth.impersonate(username)
oczekujących na odpowiedź zostaną anulowane, więc nie mogę tego użyć. Hack $location.path($location.path())
też nie działa (nic się nie dzieje).
Czy istnieje inny sposób ponownego renderowania strony bez ręcznego wydawania wszystkich żądań?
Odpowiedzi:
W celu wymuszenia kątowego ponownego renderowania bieżącej strony można użyć:
Zgodnie z dokumentacją AngularJS :
źródło
$route.reload()
porównaniu do normalnego odświeżania. Na przykład karta jest ustawiona tak, aby początkowo wyświetlała się przy odświeżaniu, ale gdy metoda przeładowania wydaje się ponownie ładować stronę bez ustawiania karty, nie jestem pewien, na czym polega problem.$route
do kontrolera, aby to zadziałało.angular.js file
. Jeśli nadal używasz,$routeProvider
musisz teraz dołączyć doangular-route.js
kodu HTML:$route.reload()
ponownie zainicjuje kontrolerów, ale nie usługi. Jeśli chcesz zresetować cały stan aplikacji, możesz użyć:Jest to standardowa metoda DOM, do której można uzyskać dostęp wstrzykując usługę $ window .
Jeśli chcesz mieć pewność, że strona zostanie ponownie załadowana z serwera, na przykład, gdy używasz Django lub innej platformy WWW i chcesz zrenderować stronę po stronie serwera, przekaż
true
jako parametr doreload
, jak wyjaśniono w dokumentacji . Ponieważ wymaga to interakcji z serwerem, będzie wolniej, więc rób to tylko w razie potrzebyKątowy 2
Powyższe odnosi się do kątowego 1. Nie używam kątowa 2, wygląda jak usługi różnią się tam znajduje
Router
,Location
orazDOCUMENT
. Nie testowałem tam różnych zachowańźródło
Aby ponownie załadować stronę dla danej ścieżki trasy: -
źródło
Jeśli korzystasz z kątowego interfejsu użytkownika routera, będzie to najlepsze rozwiązanie.
źródło
Być może zapomniałeś dodać „$ route”, deklarując zależności kontrolera:
źródło
Aby przeładować wszystko, użyj window.location.reload (); z angularjs
Sprawdź działający przykład
HTML
angularJS
http://jsfiddle.net/HB7LU/22324/
źródło
Jeśli chcesz odświeżyć kontroler podczas odświeżania używanych usług, możesz użyć tego rozwiązania:
to znaczy
Spowoduje to odświeżenie kontrolera i HTML, a także możesz nazwać to Odśwież lub Ponownie renderuj .
źródło
Przed Angular 2 (AngularJs)
Trasa
Jeśli chcesz ponownie załadować całą aplikację
Angular 2+
Lub
źródło
Najłatwiejszym rozwiązaniem, jakie wymyśliłem, było
dodaj „/” do trasy, która ma zostać przeładowana za każdym razem, gdy wracasz.
na przykład:
zamiast następujących
posługiwać się,
źródło
/
//
Spróbuj wykonać jedną z następujących czynności:
źródło
Mam ten działający kod do usuwania pamięci podręcznej i ponownego ładowania strony
Widok
Kontroler
Wtryskiwacze: $ scope, $ state, $ stateParams, $ templateCache
źródło
Użyj następującego kodu bez poufnego powiadomienia o ponownym załadowaniu do użytkownika. Wyrenderuje stronę
źródło
Od miesięcy mam ciężką walkę z tym problemem, a jedynym rozwiązaniem, które mi się udało, jest:
źródło
$window.location.reload()
to w żaden sposób od postępowania, o którym konkretnie wspomina OP, w jego przypadku nie działa prawidłowo.