Używam routera UI w mojej aplikacji i używam detektora $stateChangeStart
, aby pokazać program ładujący i $stateChangeSuccess
, aby ukryć moduł ładujący. W ten sposób mam ładowarkę między przejściami stanów.Jak być informowanym o anulowaniu zmian stanu w ui-routerze?
$rootScope.$on('$stateChangeStart',
function (event, toState, toParams, fromState, fromParams) {
///show loader
});
$rootScope.$on('$stateChangeSuccess',
function (event, toState, toParams, fromState, fromParams) {
//hide loader
});
Problem:
- jestem w stanie
- kliknięciu na przycisk, aby przejść do stanu B,
$stateChangeStart
nazywa dla B, jest pokazana moja ładowarka. - Natychmiast po kliknięciu na inny przycisk, aby przejść do kraju A (B ma kilka rzeczy do determinacji, więc nie ma czasu, zanim B UI faktycznie rozpoczyna ładowanie)
- B nie jest załadowany, a
$stateChangeSuccess
nie nazywa i mój loader nigdy nie jest ukryty (Ponieważ byliśmy już w A, nie jest ponownie załadowywany)
Czy istnieje sposób, w jaki mogę wysłuchać anulowania zmian stanu i ukryć mój moduł ładujący?
Aktualizacja: Utworzono Plunk. W spluwie dałem timeout 10 sekund w postanowieniu B. Zanim to rozwiąże, kliknij przycisk A. Monitoruj konsolę, aby wykryć zdarzenia zmiany stanu.
Aktualizacja 25 lipca 2015 r. Wykorzystująca najnowszy router AngularUI: Utworzono nowy Plunk.
można łatwo osiągnąć poprzez utrzymywanie informacji o zmianach stanu wewnątrz usługi ... – harishr
@entre Ale nie wiadomo, kiedy odwołanie wystąpił. –
Czy coś jest nie tak z pierwszym wynikiem Google - https://github.com/angular-ui/ui-router/wiki#state-change-events? –