Ich mache eine Angular 2 App mit @ ngrx / store und @ ngrx / effects.
Ich habe Probleme damit, zu verstehen, wo Logik außerhalb von Aktionen / Effekten usw. platziert wird und wo Service-Funktionen aufgerufen werden.
Zum Beispiel mit Authentifizierung ...
AUTH_REQUEST
-Aktion mit den Anmeldedaten als Payload ausgelöst. AUTH_SUCCESS
mit dem Token, dem Benutzernamen usw. im Antwortobjekt als Payload auf, die an den Reducer weitergeleitet wird, um AuthState
zu aktualisieren. zB: In AuthEffects
In AuthReducer
Was ich wissen will ist:
AUTH_SUCCESS
-Aktion verarbeitet wurde? Tue ich dies innerhalb der Effekte Reactive Chain oder .... ?? AuthService
, die die Anmeldeinformationen (Token usw.) in LocalStorage speichern muss. Wo soll ich das "Token speichern" nennen, also authService.store(userCredentials)
. Jede Hilfe wird geschätzt.
Natürlich ist dies keine definitive Antwort; Es ist genau das, was ich gewählt habe.
Der CodeSequence / ngrx-Store-Router implementiert Aktionen für den v3-Router. Es implementiert jedoch keinen Aktionsersteller - nur die string
-Typen. Ich habe einen einfachen Aktionsersteller verwendet, so dass ich nicht überall Aktionsliterale haben muss:
Und ich habe eine Effektklasse verwendet, um die Router-Aktionen zu versenden:
%Vor%Meine Schlussfolgerung war, dass die Authentifizierungseffekte nichts mit Routing zu tun haben, es macht es einfach, Tests für Router-Effekte zu schreiben, und die Router-Aktionen passen gut zu @ ngrx / store-devtools .
Was Ihre zweite Frage betrifft, würde ich geneigt sein, sie an eine ..._SUCCESS
Aktion in einem Effekt anzuschließen.
Ich wäre an alternativen Ansätzen interessiert.
Es gibt auch eine "offizielle" ngrx-Bibliothek, die diese Art von Funktionalitäten behandelt: @ ngrx / router-store . Im Moment wird @ ngrx / router zugunsten von @ angular / router 3.0.0 (jetzt in RC1) veraltet, wie von einen Migrationsleitfaden . Als Konsequenz erfährt der Router-Store auch Änderungen, um zu einem angularen Router zu migrieren, und es gibt einen ausstehenden PR das ansprechen. Wenn sich alles hoffentlich ein wenig beruhigt, bietet Router-Store einen Aktionsersteller für Navigationszwecke, sehr praktisch, um von Effekten zurückzukehren:
%Vor%Im Moment scheint es, dass das nicht funktioniert, aber es sollte zurück sein, sobald Router-Store aktualisiert wird. HTH
Ich mache es so:
%Vor% Rufen Sie nach Bedarf weitere Aktionen / Effekte vor der letzten Aktion auf. Natürlich funktioniert dieses Beispiel mit '@ngrx/router-store'
.
Lesen Sie den erstaunlichen Code example-app aus dem offiziellen Repo.