Il problema che sto riscontrando potrebbe essere tangenziale, ma poiché googling mi ha portato a questa domanda, questo potrebbe essere appropriato. Il problema suscita la sua brutta testa per me quando utilizzo UI Router, ma solo quando provo ad aggiornare la pagina con il pulsante di aggiornamento del browser. L'app utilizza il router UI con uno stato astratto padre e quindi gli stati figlio fuori dal padre. Sulla run()
funzione app , c'è un $state.go('...child-state...')
comando. Lo stato genitore utilizza un resolve
, e all'inizio pensavo che forse un controller figlio eseguisse due volte.
Va tutto bene prima che all'URL sia stato aggiunto l'hash.
www.someoldwebaddress.org
Quindi, una volta che l'URL è stato modificato dal router dell'interfaccia utente,
www.someoldwebaddress.org#/childstate
... e poi quando aggiorno la pagina con il pulsante di aggiornamento del browser , il $stateChangeStart
fuoco si accende due volte e ogni volta punta al childstate
.
Lo resolve
stato genitore è ciò che sta sparando due volte.
Forse questo è un kludge; a prescindere, questo sembra eliminare il problema per me: nell'area del codice in cui $stateProvider
viene invocato per la prima volta , per prima cosa controlla se window.location.hash è una stringa vuota. Se lo è, va tutto bene; in caso contrario, impostare window.location.hash su una stringa vuota. Quindi sembra che l' $state
unico tentativo di andare da qualche parte una volta anziché due volte.
Inoltre, se non vuoi fare affidamento sul valore predefinito dell'app run
e state.go(...)
, puoi provare a catturare il valore hash e utilizzare il valore hash per determinare lo stato figlio in cui ti trovavi poco prima dell'aggiornamento della pagina e aggiungere una condizione all'area nella tua codice dove hai impostato il state.go(...)
.
ng-app
e con il bootstrap manuale). Controlla anche se hai collegato il controller a più elementi (con ng-controller).