我不能在单个元素上多次收听一个事件.
我注意到以下几点:
- 仅当从生命周期方法(如
ngAfterViewChecked
、ngDoCheck
或新的afterRender()
挂钩)触发可观察到的RxJS时,才会出现此问题. - 当收听不同的事件
click
amp;mousedown
时,没有问题 - 这可能与zone.js打补丁有关,因为提供
ɵNoopNgZone
没有问题.
我真的不明白发生了什么事.有什么 idea 吗?
转载:
export class App implements AfterViewChecked {
@ViewChild("button") button!: ElementRef<HTMLElement>;
render$$ = new Subject<void>();
ngAfterViewInit() {
this.render$$
.pipe(switchMap(() => fromEvent(this.button.nativeElement, "click")))
.subscribe(() => console.log("--- click 1 ---"));
this.render$$
.pipe(switchMap(() => fromEvent(this.button.nativeElement, "click")))
.subscribe(() => console.log("--- click 2 ---"));
}
ngAfterViewChecked() {
this.render$$.next();
}
}
在该示例中,尽管监听相同的事件/按钮,但从不记录--- click 2 ---
.