angular - ngrx/data error$ stream - 忽略之前的值

标签 angular rxjs ngrx-data

我在我的应用程序中使用 ngrx/data 并试图找出如何使用 error$ 流来显示组件中的错误。基本上,我使用带有表单的模式弹出窗口来创建实体,并且我使用 error$ 流来显示保存时发生的任何错误。我遇到的问题是,如果发生错误并显示错误,并且在下次打开时关闭弹出窗口,则会显示上一个错误。这是 error$ 选择器的代码

    this.entityActionErrors$ = actions.pipe(
      filter(
        (ea: EntityAction) =>
          ea.payload &&
          ea.payload.entityOp &&
          ea.payload.entityOp.endsWith(OP_ERROR)
      ),
      shareReplay(1)
    );

问题出在 shareReplay(1) 上。我试图弄清楚如何在重新打开模式并再次订阅错误 $ 流时忽略或过滤掉之前的错误。

在 rxjs 中有没有办法忽略或过滤掉 sharedReplay 主题的先前发射?

最佳答案

我想到的解决方案是为错误消息使用单独的主题。我在为实体创建的服务类中执行了此操作。

export class VolunteersService extends EntityCollectionServiceBase<Volunteer> {
  constructor(factory: EntityCollectionServiceElementsFactory) {
    super('Volunteer', factory);

    this.errors$
      .pipe(
        filter(
          (ea: EntityAction) =>
            ea.payload.entityName === 'Volunteer' &&
            ea.payload.entityOp === EntityOp.SAVE_ADD_ONE_ERROR
        )
      )
      .subscribe(() => this._addErrorSubject.next('We couldn\'t save your changes at the moment. Please try again later.'));
  }

  private _addErrorSubject = new Subject<string>();

  get addError$(): Observable<string> {
    return this._addErrorSubject;
  }
}

我试图解决的问题是本地组件状态的问题,所以虽然这确实有效,但我决定采用不同的解决方案。在 ngrx/data 中,EntityCollectionServiceBase 类中的所有命令方法都会返回一个 Observable,该 Observable 在存储更新后发出。所以在组件中我订阅了如下命令方法:

  save() {
    this._pending = true;
    this.volunteersService.add(volunteer).subscribe(
      () => {
        this._pending = false;
      },
      error => {
        this._pending = false;
        this._error = error.message;
      }
    );
  }

此解决方案完美运行,并将此状态保存在它所属的组件中并保存在商店外。

关于angular - ngrx/data error$ stream - 忽略之前的值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59313648/

相关文章:

json - Angular Http get方法getById和getByName的区别

angular - Cypress e2e 测试平台在 cy.visit() 上关闭

angular - 如何处理 Angular 8 中的 View 子静态错误

javascript - 如何递归连接两个嵌套的可观察量

javascript - RxJS 仅使用最后一个 promise 的响应

angular - 如何使用 Entity Effects 扩展 ngrx/data?

angular - 如何使用@ngrx/data 自定义我的 reducer ?

css - 为 CSS 作用域生成的 Angular 属性未应用于组件的内部元素

javascript - startWith 运算符 Rxjs 未按预期工作