2014-04-24 6 views
19

Mam aplikację AngularJS zaczynającą się od pliku index.html i używającą interfejsu użytkownika. Na podstawie wyzwalacza chcę przeładować całą stronę. Próbowałem:Ui-router AngularJS: wymuś ponowne ładowanie

$state.go($state.current, $stateParams, { 
    reload: true, 
    inherit: false, 
    notify: true 
}); 

Ale to nie działa. Nie przeładowuje mojego początkowego pliku index.html.

mogę zrobić:

window.location.href = "index.html"; 

Ale jestem na mojej pierwszej stronie, a nie obecnego stanu.

Czy zestaw window.location.href na index.html z parametrami ciągu zapytania określa bieżącą lokalizację? Jeśli to zrobię, jak mogę przejść do tej lokalizacji?

Odpowiedz

0

Jeśli to usługa droga $ w kontrolerze można spróbować $route.reload();

+0

Hi wodoru, problemem jest to, że używam najwyższej ui-routera systemu routingu dla angularjs (http://angular-ui.github.io/ui-router/site/#/api/ui.router), a nie wbudowany system routingu AngularJS. –

+0

Ah Widzę, w tym przypadku możesz potrzebować wypróbować: '$ state.reload()', aby załadować go ponownie. 'ui.router' ma usługę $ state, którą możesz wykonać, aby to zrobić. – hydrogen

+0

Problem to $ state.reload() nie inicjalizuje ponownie kontrolerów. Jest otwarty bilet na to https://github.com/angular-ui/ui-router/issues/582 – WTK

20

Obecny Sztuką jest:

$ state.go ($ state.current.name, $ state.params, {reload: true});

+0

To nie działa, jeśli twoje $ state.go jest takie samo $ state(). Zostaje całkowicie zignorowany i nie działa w milczeniu. $ window.location.reload() jednak działa. Testowany na 1.4x – RAC

-1

Spróbuj tego:

$state.transitionTo($state.current, $stateParams, { 
    reload: true, 
    inherit: false, 
    notify: true 
}); 
15

Każdy zdaje się ignorować to, co pojawia się Serge van den Oever faktycznie być pytaniem, a to, że chce całą strona przeładować, a nie tylko droga.

Rozwiązaniem, które jest dość proste, jeśli wstrzyknąć usługę $window do kontrolera:

$window.location.reload(); 

Jeśli chcesz po prostu droga, aby przeładować (co wydaje się być o wiele bardziej powszechne), a używasz ui-router , a potem po prostu wstrzyknąć usługę $state i zrobić:

$state.reload(); 

należy ponownie zainicjować kontrolerów teraz, że błąd został naprawiony, choć nie sądzę, że reinicjalizuje resolve s.

+0

Serge van den Oever oświadczył, że chce przeładować podstawową stronę html ("... To nie przeładuje mojego początkowego index.html ..."). Myślę, że ta odpowiedź powinna zostać zaakceptowana. – beawolf

1

To zadziałało dla mnie w podobnym scenariuszu.

$state.go('root.state').then(function(){ 
    $state.reload(); 
});