angular - Hur gör man if/else i ngrx/effects?


Jag använder ngrx/effects. Jag vill skicka olika åtgärder baserat på ett foo-tillstånd i lagret.

Så här mår jag nu:

 @Effect() foo1$ = this.updates$
    .whenAction(Actions.FOO)
    .filter(obj => !obj.state.product.foo)
    .map<string>(toPayload)
    .map(x => ({ type: Actions.BAR1, payload: { x }}));

  @Effect() foo2$ = this.updates$
    .whenAction(Actions.FOO)
    .filter(obj => obj.state.product.foo)
    .map<string>(toPayload)
    .map(x => ({ type: Actions.BAR2, payload: { x }}));

Finns det ett sätt att använda RxJS 5-operatörer som partition, groupBy, if, case i detta inlägg? Jag kan inte använda dem korrekt just nu.

Svar #1

Att ha 2 separata effektskällor är okej. Annars gör det enkelt:

@Effect() foo$ = this.updates$
    .whenAction(Actions.FOO)
    .map(({action, state}) => {
        if (state.product.foo) {
            return { type: Actions.CHAT_GET_MESSAGES2, payload: { action.payload }};
        } else {
            return { type: Actions.CHAT_GET_MESSAGES, payload: { action.payload }};
        }
    });

Relaterade artiklar