Problem, który napotykam, może być styczny, ale skoro Google przyniósł mi to pytanie, może to być właściwe. Problem pojawia się w mojej brzydkiej głowie podczas korzystania z routera interfejsu użytkownika, ale tylko wtedy, gdy próbuję odświeżyć stronę za pomocą przycisku odświeżania przeglądarki. Aplikacja używa routera interfejsu użytkownika z nadrzędnym stanem abstrakcyjnym, a następnie podrzędnym wyłącza nadrzędny. W run()
funkcji aplikacji jest $state.go('...child-state...')
polecenie. Stan nadrzędny używaresolve
i na początku myślałem, że może kontroler potomny wykonuje dwa razy.
Wszystko jest w porządku, zanim do adresu URL zostanie dodany skrót.
www.someoldwebaddress.org
Następnie po zmodyfikowaniu adresu URL przez router interfejsu użytkownika
www.someoldwebaddress.org#/childstate
... a następnie, gdy odświeżam stronę za pomocą przycisku odświeżania przeglądarki , $stateChangeStart
uruchamia się dwukrotnie i za każdym razem wskazuje childstate
.
Stan resolve
nadrzędny jest uruchamiany dwukrotnie.
Być może jest to kludge; niezależnie od tego, wydaje mi się, że to eliminuje problem: w obszarze kodu, który $stateProvider
jest wywoływany po raz pierwszy , najpierw sprawdź, czy window.location.hash jest pustym ciągiem. Jeśli tak, wszystko jest dobrze; jeśli tak nie jest, ustaw window.location.hash na pusty ciąg. Wydaje się, że $state
jedyną próbą jest udać się gdzieś raz, a nie dwa razy.
Ponadto, jeśli nie chcesz polegać na niewypłacalności aplikacji run
i state.go(...)
można próbować uchwycić wartość skrótu i użyć wartości hash do określenia stanu dziecka były na krótko przed odświeżania strony i dodać warunek do obszaru w swojej kod, w którym ustawiłeś state.go(...)
.
ng-app
ręcznie i ręcznie). Sprawdź także, czy podłączyłeś kontroler do wielu elementów (za pomocą ng-kontrolera).