Angular2 @ ngrx / store / effects - wo Service-Funktionen aufgerufen werden

10

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 ...

  1. Wenn ein Benutzer auf login klickt, wird eine AUTH_REQUEST -Aktion mit den Anmeldedaten als Payload ausgelöst.
  2. Ein Effekt sucht nach dieser Aktion und ruft die API auf.
  3. Ein erfolgreiches Ergebnis ruft die Aktion 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

%Vor%

In AuthReducer

%Vor%

Was ich wissen will ist:

  1. Wo soll der Router aufgerufen werden, um Seiten zu ändern, nachdem eine AUTH_SUCCESS -Aktion verarbeitet wurde? Tue ich dies innerhalb der Effekte Reactive Chain oder .... ??
  2. Ich habe eine 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.

    
markstewie 15.08.2016, 00:40
quelle

3 Antworten

4

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:

%Vor%

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.

    
cartant 15.08.2016, 22:00
quelle
0

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

    
superjos 26.08.2016 09:48
quelle
0

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.

    
llstarscreamll 24.01.2017 04:04
quelle

Tags und Links