代码之家  ›  专栏  ›  技术社区  ›  Yousuf Jawwad

NGXS:ofActionSuccessful未被触发,但操作显示在Redux Devtools上

  •  0
  • Yousuf Jawwad  · 技术社区  · 6 年前

    我遵循的缓存示例来自 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);
            });
    
    0 回复  |  直到 6 年前
        1
  •  0
  •   Yousuf Jawwad    6 年前

    快速更新,我能解决这个问题。这个 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);
          });
      }