5
Statement

problem:Jak zdobyć poprzedniego stanu z Params użyciu UI-Router

mam przycisku „Dodaj komentarz”, powinienem móc dodać komentarz tylko gdy mam zalogować się do systemu.

Ale problem polega na tym, że nie mogę wrócić do strony "dodaj komentarz" po zalogowaniu, ponieważ nie znam poprzedniego stanu lub nie mogę uzyskać poprzedniego stanu.

Czy jest jakieś czystsze rozwiązanie tego problemu? Czy mam stronę logowania zamiast modalnej, a nie nowej strony?

Widziałem wszystkie pytania, które dotyczą poprzedniego stanu, a także możliwe odpowiedzi (tak, biorę około $ rootscope i $ stateChangeSuccess). Ale nie przedstawia jasno rozwiązań.

Inne możliwe rozwiązanie jest poniżej http://christopherthielen.github.io/ui-router-extras/example/previous/index.html#

Widziałem też https://github.com/angular-ui/ui-router/issues/92. ale znowu nie byłem pewien, jaka jest prawidłowa odpowiedź.

Czy ktoś może jasno przedstawić dobre rozwiązanie. Czy używanie korzenia jest dobre?

+0

Można dodać parametr 'returnUrl' (lub' returnState') do stanu logowania, a następnie ustawić go na przekierowanie do stanu logowania. –

+0

myślałem o tym rozwiązaniu. ale wtedy muszę pomyśleć o parametrach, które należy przekazać wraz z adresem zwrotnym. to sprawia, że ​​jest to trochę nudne –

Odpowiedz

13

Czy mam stronę z loginem raczej modalną niż nową? To jest decyzja projektowa. Możesz mieć wszystko, co pasuje do Twojej aplikacji i do Twoich potrzeb.

Czy używanie korzeniac jest dobre? Uważam, że jest to całkiem dobre rozwiązanie. Oto w jaki sposób to zrobić:

Zapisz poprzedniego stanu ręcznie:

Tworzenie słuchacza zmiany Stan:

$rootScope.$on('$stateChangeSuccess', function(event, to, toParams, from, fromParams) { 
     //save the previous state in a rootScope variable so that it's accessible from everywhere 
     $rootScope.previousState = from; 
    }); 
    }]); 

Zamiast UI-sref, umieścić funkcję kliknij na przycisku komentarz .

$scope.commentHandler = function(){ 
    //check if user is logged in, let the user post the comment 

    //else take him to login page 
} 

Następnie można użyć $state.go($rootScope.previousState.name) po zalogowaniu się użytkownika, aby wrócić do komentowania strony.

OR -

Mogłeś dostarczać małe okienko logowania w miejscu „komentarz” przycisk, jeśli użytkownik nie jest zalogowany

+1

To działało dobrze dla mnie. – AdeelMufti

0

Dla ui-routera v1.0.0 +, wydarzeń zmiana stanu. zostały deprecated.

Uaktualniona wersja zmian słuchacza Arjun's państwowej byłoby

$transitions.onStart({}, function (transition) { 
    $rootScope.previousState = transition.from(); 
});