5

Problem Statement erhalten:Wie der vorherige Zustand mit Params mit ui-Router

Ich habe eine Schaltfläche „Kommentar hinzufügen“, sollte ich in der Lage sein Kommentar nur hinzufügen, wenn ich in das System angemeldet haben.

Aber Problem ist, ich kann nicht zurückkommen zu "Kommentar hinzufügen" -Seite nach dem Login, weil ich nicht weiß, den vorherigen Zustand oder kann nicht den vorherigen Zustand.

Gibt es eine sauberere Lösung? Sollte ich auf der Anmeldeseite eine modale statt einer neuen Seite haben?

Ich habe alle Fragen gesehen, die über den vorherigen Zustand und die möglichen Antworten (ja, ich nehme etwa $ rootscope und $ stateChangeSuccess). Aber es bringt nicht klar die Lösungen vor.

Andere mögliche Lösung ist, wie unten http://christopherthielen.github.io/ui-router-extras/example/previous/index.html#

Ich sah https://github.com/angular-ui/ui-router/issues/92 auch. Aber ich war mir nicht sicher, was die richtige Antwort ist.

Könnte jemand klar eine gute Lösung angeben. Ist rootscope gut?

+0

Sie könnten einen 'returnUrl' Parameter (oder' returnState') auf den Login-Zustand, hinzufügen und es dann auf den Login-Zustand auf Umleitung. –

+0

Ich dachte an diese Lösung. aber dann muss ich an Parameter denken, die zusammen mit der Return-URL übergeben werden. das macht das etwas langweilig –

Antwort

13

Sollte ich Login-Seite eine Modal statt eine neue Seite haben? Das ist eine Designentscheidung. Sie können alles, was zu Ihrer App passt, nach Ihren Wünschen gestalten.

Verwendet rootscope eine gute? Ich fühle es eine ziemlich gute Lösung. Hier ist, wie ich es tun würde:

speichern vorherigen Zustand manuell:

erstellen Zustandsänderung Hörer:

$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; 
    }); 
    }]); 

Statt ui-sref verwenden, setzen Sie ein Klick-Funktion für den Kommentar-Taste .

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

    //else take him to login page 
} 

Dann können Sie $state.go($rootScope.previousState.name) verwenden, nachdem Benutzer angemeldet hat, um zurück zu gehen Seite zu kommentieren.

-OR -

Sie ein kleines Login-Feld anstelle des „Kommentar senden“ bieten könnte Schaltfläche, wenn Benutzer nicht angemeldet

+1

Das hat gut für mich funktioniert. – AdeelMufti

0

Für ui-Router v1.0.0 +, Ereignisse Zustandsänderung. waren deprecated.

Eine aktualisierte Version des Zuhörers Arjun's Zustandsänderung wäre

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