gpt4 book ai didi

angular - 仅针对第一个事件触发 combineLatest

转载 作者:行者123 更新时间:2023-12-05 04:54:43 26 4
gpt4 key购买 nike

我有 3 个事件需要合并,当其中一个被触发时,调用服务。我使用了 combineLatest,但只有当第一个事件被 filterChanged 触发时它才有效。

filterChanged 是一个本地事件,其余的都是来自子组件的事件。我该如何解决这个问题,以发出其中一个事件,甚至从页面初始化开始?

filterChanged = new EventEmitter<boolean>();
paginatorChanged = new EventEmitter<MatPaginator>();
sortChanged = new EventEmitter<{}>();

ngAfterViewInit(): void {
combineLatest(
this.paginatorChanged,
this.sortChanged,
this.filterChanged
).pipe(
startWith([null, null, null]),
switchMap(value => {
const paginator = value[0];
const sort = value[1];
const filters = value[2];

return this.service.getFiltered(paginator, sort, filters);
})).subscribe(data => this.data = data);
}

applyFilter(): void {
this.filterChanged.emit(true);
}

onPaginatorChanged(paginator): void {
this.paginatorChanged.emit(paginator);
}

onSortChanged(sort): void {
this.sortChanged.emit(sort);
}

谢谢

最佳答案

目前这个问题还不清楚,但是如果你想触发 combineLatest 没有 filterChanged observable emitting at least once ,那么我会说你错误地使用了 startWith 运算符。它应该通过管道单独传输到每个可观察源。

尝试以下操作

ngAfterViewInit(): void {
combineLatest(
this.paginatorChanged.pipe(startWith(null)),
this.sortChanged.pipe(startWith(null)),
this.filterChanged.pipe(startWith(null))
).pipe(
switchMap(value => {
const paginator = value[0];
const sort = value[1];
const filters = value[2];

return this.service.getFiltered(paginator, sort, filters);
})
).subscribe(data => this.data = data);
}

此外,对于本地多播可观察对象,您可以使用 RxJS Subject(或其兄弟)而不是使用 Angular 特定的 EventEmitter

关于angular - 仅针对第一个事件触发 combineLatest,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65665201/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com