【发布时间】:2019-05-28 09:32:09
【问题描述】:
我有一个大型组件,我想避免不必要的更改检测以提高性能。
我将changeDetection: ChangeDetectionStrategy.OnPush 添加到@Component。
如果元素滚动,我想更新它的样式。不幸的是,每次滚动该元素时,Angular 都会运行更改检测。
我尝试向本机元素添加事件侦听器以避免这种情况,但是当我滚动时更改检测仍在运行:
@ViewChild('my_element') my_element_ref: ElementRef;
ngOnInit() {
this.my_element_ref.nativeElement.addEventListener('scroll', this.updateStyle);
}
ngAfterViewChecked() {
console.log('check');
}
即使this.updateStyle 是一个空函数,也会调用ngAfterViewChecked。
但是如果我注释掉this.my_element_ref.nativeElement.addEventListener('scroll', this.onScroll),那么ngAfterViewChecked就不会再被调用了。
如何在元素滚动时调用函数,但避免 Angular 的变化检测?
【问题讨论】:
标签: javascript angular