首页 > 解决方案 > 清除 observable 不允许将新数据重新加载到表中

问题描述

我正在尝试清除包含将显示在表格中的数据的可观察对象。目前,我有一个input$可观察到的数据,它结合了最新数据,如下所示:

this.inputs$ = observableCombineLatest(
      this.paymentDates$,
      ...
      this.reassessmentDate$,
      (
        paymentDates,
        ...
        reassessmentDate,
      ) => ({
        paymentDates,
       ...
        reassessmentDate,
      }),
    ).pipe(debounceTime(500));

一旦收到每个值,它将触发另一个可观察的设置表所需的数据:

this.transactionSummary$ = this.inputs$
      .pipe(
        map(this.mapDataForTransactionSummary, this),
        share(),
      )
      .pipe(
        mergeMap(data => {
          debugger;
          return this.taxService.getTransactionSummary(data);
        }),
      )
      .pipe(
        tap(this.transactionSummaryEmitter),
        map(this.calculateComputedValues),
        share(),
      );

决定显示它的html如下:

<div *ngIf="(transactionSummary$ | async) as summaryData; else loading">

现在,当表第一次加载时,它工作正常没问题,但是如果我说在这种情况下选择一个新用户并重新加载表,它将包含前一个用户的数据,并在几秒钟后用新数据更新,但是我不想显示旧数据,宁愿在新数据出现时不显示。

所以我对此的解决方案是简单地向inputs$可观察对象添加一个水龙头并将其设置transactionSummary$为空,

.pipe(tap(() => {
      this.transactionSummary$ = null;
    }), debounceTime(500));

但是这根本不起作用,只是不加载表格。任何想法为什么会这样?

标签: angularrxjs

解决方案


只是继续我的评论。使用您想到的建议解决方案来解决您的问题。您可以执行以下操作。

将交易摘要设为SubjectBehaviorSubject。rxjs 页面中的更多详细信息:http ://reactivex.io/rxjs/manual/overview.html

this.transactionSummary$ = new Subject()

然后,当您初始化组件时,您可以订阅$inputs.

this.inputs$
  .pipe(
    ...do your magic
  )
  .subscribe(data => this.transactionSummary$.next(data));

之后,每当您“选择新用户”时,您就可以去this.transactionSummary$.next(null).


推荐阅读