Das Problem, auf das ich stoße, mag tangential sein, aber da mich das Googeln zu dieser Frage gebracht hat, könnte dies angemessen sein. Das Problem ist für mich bei der Verwendung des UI-Routers hässlich, aber nur, wenn ich versuche, die Seite mit der Schaltfläche zum Aktualisieren des Browsers zu aktualisieren. Die App verwendet den UI-Router mit einem übergeordneten abstrakten Status und den untergeordneten Status des übergeordneten Status. In der App- run()
Funktion gibt es einen $state.go('...child-state...')
Befehl. Der übergeordnete Status verwendet a resolve
, und zuerst dachte ich, dass ein untergeordneter Controller möglicherweise zweimal ausgeführt wird.
Alles ist in Ordnung, bevor an die URL der Hash angehängt wurde.
www.someoldwebaddress.org
Sobald die URL vom UI-Router geändert wurde,
www.someoldwebaddress.org#/childstate
... und wenn ich dann die Seite mit der Schaltfläche zum Aktualisieren des Browsers aktualisiere , wird die Seite $stateChangeStart
zweimal ausgelöst und zeigt jedes Mal auf die childstate
.
Der resolve
Status "Übergeordnet" wird zweimal ausgelöst.
Vielleicht ist das ein Kludge; Unabhängig davon scheint dies das Problem für mich zu beseitigen: Überprüfen Sie im Bereich des Codes, in dem $stateProvider
zuerst aufgerufen wird, zunächst , ob die Datei window.location.hash eine leere Zeichenfolge ist. Wenn ja, ist alles gut; Ist dies nicht der Fall , setzen Sie die Datei window.location.hash auf eine leere Zeichenfolge. Dann scheint es der $state
einzige Versuch zu sein, einmal statt zweimal irgendwohin zu gehen.
Wenn Sie sich nicht auf die Standardeinstellungen der App verlassen möchten run
und können state.go(...)
, können Sie versuchen, den Hash-Wert zu erfassen und anhand des Hash-Werts den untergeordneten Status zu bestimmen, in dem Sie sich kurz vor der Seitenaktualisierung befanden, und dem Bereich in Ihrer App eine Bedingung hinzufügen Code, in dem Sie die state.go(...)
.
ng-app
und mit manuellem Bootstrap initialisieren lassen ). Überprüfen Sie auch, ob Sie Ihren Controller an mehrere Elemente angeschlossen haben (mit ng-controller).