Dies ist eine Frage der Best Practice.Angular UI Router: Wo sollte ich den Status ändern? Controller? Dienstleistungen? Ereignislistener?
Ich habe eine eckige Anwendung mit einigen geschachtelten Zuständen und Ansichten.
Wenn mein Benutzer die Schaltfläche "Abmelden" drückt, die an eine Controller-Funktion angeschlossen ist, ruft die Controller-Funktion eine Funktion in einem Authentifizierungsdienst auf. Der Authentifizierungsdienst ruft dann den Server an und irgendwo entlang des Benutzers muss der Benutzer zur Anmeldeseite weitergeleitet werden.
Ich hatte ein paar Gedanken mit, wo die tatsächliche "state.go ('Login')" sein sollte.
(1) Der Dienst führt den Anruf zum Server aus, und wenn dieser Anruf beendet wird, ändert der Dienst den Status zur Anmeldung.
Das fühlt sich schlecht an, weil ein Dienst in meinen Augen eine statische Entität sein sollte, die Daten oder Funktionalität bereitstellt und vom Rest der App getrennt ist.
(2) Der Controller ändert den Status zur Anmeldung nach dem Aufruf des Authentifizierungsdienstes.
Das scheint besser. Dem Controller ist die Anwendung und das Markup bereits beigefügt.
(3) Der Dienst gibt eine benutzerdefinierte Aktion aus, die ich in einer App-Konstante wie EVENTS.LOGOUT_SUCCESSFUL definiere, und dann im Stammbereich lausche ich auf dieses Ereignis und führe state.go im Ereignis-Listener aus.
Nicht sicher über dieses, macht es die Dinge komplizierter, aber scheint ziemlich sauber.
Irgendwelche Gedanken?