仅针对第一个事件触发 combineLatest
combineLatest is fired only for first event
我有 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 至少发射一次,那么我会说您使用的 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
.
我有 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 至少发射一次,那么我会说您使用的 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
.