Angular7 - Как я могу загрузить состояние из localStorage с помощью nrgx-store / Effects - PullRequest
0 голосов
/ 02 марта 2019

Как я могу загрузить состояние из localStorage с nrgx-эффектами?

Когда я инициализирую приложение, я вызываю

this.store.dispatch(new cartActions.LoadCart());

Далее запускается действие CART_LOAD

cart.action

export class LoadCart implements Action {
    readonly type = LOAD_CART;
}

export class LoadCartSuccess implements Action {
    readonly type = LOAD_CART_SUCCESS;

    constructor(public payload: any) {}
}

Далее я слушаю эффект

@Effect()
    loadCart$ = this.actions$.pipe(ofType(cartActions.LOAD_CART),
        tap(action => {
            return this.CartService.getCart().subscribe(cart => new cartActions.LoadCartSuccess(cart));
        })
    );

cart.service

getCart() {
    return JSON.parse(localStorage.getItem('cart'));
}

Локальное хранилище

{products: Array(3), cartTotal: 3, cartCost: 12000}

Но значение LOAD_CART_SUCCESS не достигает

NgRx Store DevTools

Что язабыл сделать, это поместить localStorage в хранилище во время инициализации приложения?

.

1 Ответ

0 голосов
/ 03 марта 2019

Оператор касания, используемый в вашем эффекте, не будет отправлять какое-либо действие, вы можете использовать его для регистрации или пересылки.

Чтобы запустить действие в действии, которое вы должны использовать. Такие операторы, как map, switchMap, concatMap... ect для возврата нового действия для отправки.

Ваш сервис CartService не возвращает наблюдаемого, поэтому вы не можете подписаться на него.

Вы можете изменить свой эффект следующим образом:

@Effect() loadCart$ = this.actions$.pipe(ofType(cartActions.LOAD_CART), map(action => {
const cart = this.CartService.getCart();
return new cartActions.LoadCartSuccess(cart); 
}) );
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...