Ich verwende Angular UI Router und möchte den aktuellen Status neu laden und alle Daten aktualisieren / die Controller für den aktuellen Status und den übergeordneten Status erneut ausführen.
Ich habe 3 Statusebenen: directory.organisations.details
directory.organisations enthält eine Tabelle mit einer Liste von Organisationen. Durch Klicken auf ein Element in der Tabelle wird directory.organisations.details geladen, wobei $ StateParams die ID des Elements übergibt. Im Detailstatus lade ich die Details für dieses Element, bearbeite sie und speichere dann Daten. Alles in Ordnung soweit.
Jetzt muss ich diesen Status neu laden und alle Daten aktualisieren.
Ich habe versucht:
$state.transitionTo('directory.organisations');
Das geht in den übergeordneten Status, lädt aber den Controller nicht neu, denke ich, weil sich der Pfad nicht geändert hat. Im Idealfall möchte ich nur im Status " directory.organisations.details" bleiben und alle Daten im übergeordneten Element aktualisieren.
Ich habe auch versucht:
$state.reload()
Ich habe dies auf der API WIKI für $ state.reload gesehen "(Fehler mit Controllern, die gerade neu installiert werden und bald behoben werden)."
Jede Hilfe wäre dankbar?
quelle
$state.transitionTo($state.current, $stateParams, {reload:true, inherit:false})
hinzugefügt werden? Wenn ich das gleiche Problem mit dem Neuladen meiner Status habe, gehen alle Daten verloren.Antworten:
Ich fand, dass dies der kürzeste Weg ist, um mit dem UI-Router zu aktualisieren:
Update für neuere Versionen:
Welches ist ein Alias für:
Dokumentation: https://angular-ui.github.io/ui-router/site/#/api/ui.router.state.$state#methods_reload
quelle
ui-router
es meiner Meinung nach keine Methode dafür. Tu eswindow.location.reload(true)
.$window.location.reload();
. Obwohl dies ein wenig übertrieben erscheint, könnte es das Testen / Verspotten / Kennen aller Abhängigkeiten eines Codeteils etwas einfacher machen.Diese Lösung funktioniert in AngularJS V.1.2.2:
quelle
resolve
Gegenstände des Staates wieder auflösen ?Das wäre die endgültige Lösung. (inspiriert von @ Hollan_Risleys Beitrag)
Wenn Sie jetzt neu laden müssen, rufen Sie einfach an:
quelle
für ionisches Gerüst
https://github.com/angular-ui/ui-router/issues/582
quelle
$state.go
gelungen ist, in einen neuen Zustand umzuleiten. Danke @RouR. Hat meinen Tag gerettet.$state
? Ich laufe ionic 1.4.0, eckig 1.5.3Wahrscheinlich wäre der sauberere Ansatz der folgende:
Wir können den Status nur aus dem HTML neu laden.
quelle
Die Antwort von @Holland Risley ist jetzt als API im neuesten UI-Router verfügbar.
http://angular-ui.github.io/ui-router/site/#/api/ui.router.state.$state
quelle
quelle
quelle
Wenn Sie Ihre gesamte Seite neu laden möchten, wie es scheint, fügen Sie einfach $ window in Ihren Controller ein und rufen Sie dann auf
Wenn Sie jedoch nur Ihre aktuelle Ansicht neu laden möchten, fügen Sie $ scope, $ state und $ stateParams ein (letzteres nur für den Fall, dass sich bei diesem bevorstehenden Neuladen einige Parameter ändern müssen, z. B. Ihre Seitenzahl), und rufen Sie dies in einer beliebigen auf Controller-Methode:
AngularJS v1.3.15 Angular-UI-Router v0.2.15
quelle
Dumme Problemumgehung, die immer funktioniert.
quelle
Für Angular v1.2.26 funktioniert keine der oben genannten Funktionen. Ein ng-Klick, der die oben genannten Methoden aufruft, muss zweimal angeklickt werden, damit der Status neu geladen wird.
Also habe ich 2 Klicks mit $ timeout emuliert.
quelle
Alles ist für mich gescheitert. Das einzige, was funktioniert hat ... ist das Hinzufügen von cache-view = "false" zu der Ansicht, die ich neu laden möchte, wenn ich dazu gehe.
von dieser Ausgabe https://github.com/angular-ui/ui-router/issues/582
quelle
Ich bin mir nicht sicher, warum keines davon für mich zu funktionieren schien. derjenige, der es endlich tat, war:
Dies war mit Angular 1.4.0
quelle
Ich hatte mehrere verschachtelte Ansichten und das Ziel war, nur eine mit Inhalt neu zu laden. Ich habe verschiedene Ansätze ausprobiert, aber das einzige, was für mich funktioniert hat, ist:
In diesem Fall würde nur die benötigte Ansicht neu geladen und das Caching würde weiterhin funktionieren.
quelle
Ich weiß, dass es eine Reihe von Antworten gegeben hat, aber der beste Weg, dies zu tun, ohne eine vollständige Seitenaktualisierung zu verursachen, besteht darin, einen Dummy-Parameter für die Route zu erstellen, die aktualisiert werden soll, und dann, wenn ich die Route aufrufe, übergebe ich eine Zufallszahl zum Dummy-Parameter.
und dann der Anruf auf diese Route
Funktioniert wie ein Zauber und kümmert sich um die Auflösungen.
quelle
Sie können die @ Rohan-Antwort https://stackoverflow.com/a/23609343/3297761 verwenden
Wenn Sie jedoch jeden Controller nach einer Ansichtsänderung neu laden möchten, können Sie ihn verwenden
quelle
Wenn Sie ionic v1 verwenden, funktioniert die oben genannte Lösung nicht, da ionic das Template-Caching als Teil von $ ionicConfigProvider aktiviert hat.
Das Problem zu umgehen ist etwas hackig - Sie müssen den Cache in der Datei ionic.angular.js auf 0 setzen:
quelle
Ich hatte dieses Problem, es hat meinen Kopf zerstört, mein Routing wird aus einer JSON-Datei gelesen und dann in eine Direktive eingespeist. Ich konnte auf einen UI-Status klicken, aber die Seite konnte nicht neu geladen werden. Ein Kollege von mir hat mir also einen schönen kleinen Trick dafür gezeigt.
Das hat bei mir funktioniert.
Ich hoffe es hilft
quelle