angular, .
EventManager, .
EVENT-manager.ts
import { Injectable, Inject, NgZone } from '@angular/core';
import { EVENT_MANAGER_PLUGINS, EventManager } from '@angular/platform-browser';
@Injectable()
export class CustomEventManager extends EventManager {
constructor(@Inject(EVENT_MANAGER_PLUGINS) plugins: any[], private zone: NgZone) {
super(plugins, zone);
}
addGlobalEventListener(element: HTMLElement, eventName: string, handler: Function): Function {
if(eventName.endsWith('out-zone')) {
eventName = eventName.split('.')[0];
return this.zone.runOutsideAngular(() =>
super.addGlobalEventListener(element, eventName, handler));
}
return super.addGlobalEventListener(element, eventName, handler);
}
}
app.module.ts
...
providers: [
{ provide: EventManager, useClass: CustomEventManager }
]
})
export class AppModule {}
changeDetector.detectChanges
@HostListener('window:scroll.out-zone', [])
onWindowScroll() {
const scrolledPercent =
if ( condition1 && condition2 .... ) {
this.cd.detectChanges();
}
}
.