angular - 清除 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));
但是这根本不起作用,只是不加载表格。任何想法为什么会这样?
解决方案
只是继续我的评论。使用您想到的建议解决方案来解决您的问题。您可以执行以下操作。
将交易摘要设为Subject
或BehaviorSubject
。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)
.