Możesz skorzystać z reload
metody $route
usługi. Wprowadzić $route
w kontrolerze, a następnie utworzyć metodę reloadRoute
na własną $scope
.
$scope.reloadRoute = function() {
$route.reload();
}
Następnie możesz użyć go na linku w ten sposób:
<a ng-click="reloadRoute()" class="navbar-brand" title="home" data-translate>PORTAL_NAME</a>
Ta metoda spowoduje ponowne załadowanie aktualnej trasy. Jeśli jednak chcesz wykonać pełne odświeżenie, możesz wstrzyknąć $window
i użyć tego:
$scope.reloadRoute = function() {
$window.location.reload();
}
Późniejsza edycja (ui-router):
Jak wspomnieli JamesEddyEdwards i Dunc w swoich odpowiedziach, jeśli używasz angular -ui / ui-router , możesz użyć następującej metody, aby ponownie załadować bieżący stan / trasę. Po prostu wstrzyknij $state
zamiast, $route
a otrzymasz:
$scope.reloadRoute = function() {
$state.reload();
};
window
obiekt jest udostępniany za pośrednictwem$window
serwisu w celu łatwiejszego testowania i mockowania , możesz skorzystać z czegoś takiego:I :
Na marginesie, nie sądzę, aby $ route.reload () faktycznie przeładowywała stronę, ale tylko trasę .
źródło
$window
zamiastwindow
.$window
dokumentacji , głównie dlatego, żereloadPage
byłby (lepiej) testowalny, gdy używa$window
.Zrób sztuczkę.
Nie potrzebujesz tras ani niczego po prostu starego js
źródło
Podobny do odpowiedzi Alexandrina, ale używający $ state zamiast $ route:
(Z odpowiedzi SO JimTheDev tutaj .)
źródło
Jeśli używasz bardziej zaawansowanego routera Angulars, który zdecydowanie polecam, możesz teraz po prostu użyć:
Co zasadniczo robi to samo, co odpowiedź Dunca.
źródło
Moim rozwiązaniem, aby uniknąć nieskończonej pętli, było utworzenie innego stanu, który spowodował przekierowanie:
źródło
Angular 2+
Znalazłem to podczas wyszukiwania Angular 2+, więc oto sposób:
źródło
Wystarczy go użyć
$route.reload()
(nie zapomnij wstrzyknąć $ route do kontrolera), ale z Twojego przykładu możesz po prostu użyć „href” zamiast „ng-href”:Wystarczy użyć ng-href, aby chronić użytkownika przed nieprawidłowymi linkami spowodowanymi kliknięciem, zanim Angular zastąpi zawartość tagów {{}}.
źródło
Na Angular 1.5 - po wypróbowaniu niektórych z powyższych rozwiązań chcących przeładować tylko dane bez pełnego odświeżania strony, miałem problemy z poprawnym załadowaniem danych. Zauważyłem jednak, że kiedy jadę na inną trasę, a potem wracam do obecnego, wszystko działa dobrze, ale gdy chcę tylko przeładować bieżącą trasę używając
$route.reload()
, to część kodu nie jest poprawnie wykonywana. Następnie próbowałem przekierować na aktualną trasę w następujący sposób:aw konfiguracji modułu dodaj kolejny
when
:i dla mnie działa dobrze. Nie odświeża całej strony, a jedynie powoduje ponowne załadowanie bieżącego kontrolera i szablonu. Wiem, że to trochę zepsute, ale to było jedyne rozwiązanie, jakie znalazłem.
źródło
var reload = $location.url(); $location.url(''); $timeout(function() { $location.url(reload); });
; nie ma potrzeby tworzenia losowych tras. Ale byłoby interesujące zobaczyć, który kod nie jest ponownie oceniany dla Ciebie. Wygląda na to, że nawet funkcjeredirectTo
iresolve
funkcje są wykonywane ponownie w normalnym trybie$route.reload()
(spójrz na console.log).i w kontrolerze
oraz w pliku trasy
Tak więc, jeśli identyfikator przekazany w adresie URL jest taki sam, jak ten, który pochodzi z funkcji wywołanej przez kliknięcie kotwicy, po prostu załaduj ponownie, w przeciwnym razie podążaj za żądaną trasą.
Proszę, pomóż mi ulepszyć tę odpowiedź, jeśli to pomaga. Wszelkie sugestie są mile widziane.
źródło
Można to zrobić, wywołując metodę reload () obiektu window w zwykłym języku JavaScript
źródło
Proponuję odnieść się do strony. Oficjalna sugestia
https://docs.angularjs.org/guide/$location
źródło
Można to zrobić, wywołując metodę reload () w JavaScript.
źródło