NGXS: ofActionSuccessful не запускается, однако действие показано на Redux Devtools - PullRequest
1 голос
/ 30 марта 2019

Я следую примеру кэширования из docs . Мое действие сначала ищет существующее хранилище, а затем извлекает вызов http. ofActionSuccesful успешно срабатывает, когда я вызываю http, но не срабатывает, когда я возвращаюсь из магазина. Вот мой магазин код

  @Action(Get)
  get(ctx: StateContext<SubmissionStateModel>, action: Get) {
    const id = action.payload;
    const submissions = ctx.getState().submissions;
    const index = submissions.findIndex(submission => parseInt(submission.id, 10) === parseInt(id, 10));

    return index > -1
      ? ctx.dispatch(new GetSuccess(submissions[index]))
      : this._submissionService.get(id).pipe(
          map(response => {
            ctx.patchState({ submissions: [response, ...submissions] });
            return ctx.dispatch(new GetSuccess(response));
          }),
        );
  }

и из моего компонента

      this._actions
        .pipe(
          ofActionSuccessful(SubmissionActions.GetSuccess),
          takeUntil(this._onDestroy$),
        )
        .subscribe(action => {
          this._store.dispatch(new SubmissionActions.SetActive(action.payload.id));
          this.submissionEditForm.patchValue(action.payload);
        });

1 Ответ

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

Быстрое обновление, я смог решить это.Подписчик actions должен быть внутри конструктора.Я инициализировал это в ngOnInit.Окончательный код выглядит следующим образом

  constructor(
    private _actions: Actions,
  ) {
    this._actions
      .pipe(
        ofActionSuccessful(SubmissionActions.GetSuccess),
        takeUntil(this._onDestroy$),
      )
      .subscribe(action => {
        this._store.dispatch(new SubmissionActions.SetActive(action.payload.id));
        this.submissionEditForm.patchValue(action.payload);
      });
  }
...