我想知道如何在更新表中的数据时更改合并中的间隔值:
merge(this.sort.sortChange, this.paginator.page, interval(this.delay))
.pipe(
startWith({}), // ... fetch data
当我单击一行时,我需要在对话框打开时不更新表,因此我想在此间隔中放置一个大计时器(或者如果您有更好的解决方案,或者如果您知道获取TS中的最大日期也很受欢迎^^')
selectRow(row: GithubIssue) {
this.selection.select(row);
this.delay = 10000000;
const dialogRef = this.dialog.open(DialogComponent);
dialogRef.afterClosed().subscribe(() => {
this.selection.clear();
this.delay = 30000;
});
}
如果可以帮助我,我已经进行了一次堆栈闪电式仓库:repo stackblitz
感谢您的帮助
答案 0 :(得分:1)
您可以制作一个间隔流,该间隔流可以通过切换主题进行切换。假设全局范围内有keepUpdating$ = new BehaviorSubject<boolean>(true);
。
toggleInterval$ = keepUpdating$.pipe(
switchMap(update =>
update? interval(this.delay) : EMPTY
)
);
merge(this.sort.sortChange, this.paginator.page, toggleInterval$)
.pipe(
startWith({}), // ... fetch data
然后您可以像这样使用它:
selectRow(row: GithubIssue) {
this.selection.select(row);
this.keepUpdating$.next(false);
const dialogRef = this.dialog.open(DialogComponent);
dialogRef.afterClosed().subscribe(() => {
this.selection.clear();
this.keepUpdating$.next(true);
});
}
旁注:
像这样轮询您的后端/数据库可能是一个错误的设计选择。如果要实时更新表,则在等待任何更新时让表打ic(带有加载动画)会给用户带来不好的体验。相反,您应该考虑在后台执行更新,并在准备好显示更新时将其推送到表中。
然后无需检查间隔,只需在更改准备就绪时推送更改即可。
答案 1 :(得分:0)
我会用skipWhile
运算符来尝试。像
.pipe(
skipWhile(() => this.dialogRef && this.dialogRef.getState() === MatDialogState.OPEN)
)