typescript - Javascript removeEventListener OnDestroy fungerer ikke i Angular 6
Jeg prøver å removeEventListener i min Angular-komponent: Javascript removeEventListener fungerer ikke
...
ngOnInit() {
document.addEventListener('visibilitychange', () =>this.handleVisibleState(), true);
}
ngOnDestroy() {
document.removeEventListener('visibilitychange', () => this.handleVisibleState(), true);
}
handleVisibleState() {
let vis = document.visibilityState === 'visible';
this.configsService.update_collab_visible(vis);
}
...
med den ovennevnte addEventListener fungerer selv etter ngOnDestroy()
Hvordan kan jeg koble fra visibilityState fra dokumentet i Angular-komponenter?
forsøk 2
private visibilityChangeCallback: () => void;
ngOnInit() {
this.visibilityChangeCallback = () => this.handleVisibleState();
document.addEventListener('visibilitychange', this.handleVisibleState, true);
}
ngOnDestroy() {
document.removeEventListener('visibilitychange', this.handleVisibleState, true);
}
handleVisibleState() {
let vis = document.visibilityState === 'visible';
console.log(typeof this.configsService); // undefined
this.configsService.update_collab_visible(vis);
}
resultat :
FEIL TypeError: Kan ikke lese egenskapen 'update_collab_visible' av undefined
Svar #1
Lagre tilbakeringingen:
private visibilityChangeCallback: () => void;
ngOnInit() {
this.visibilityChangeCallback = () => this.handleVisibleState();
document.addEventListener('visibilitychange', this.visibilityChangeCallback, true);
}
ngOnDestroy() {
document.removeEventListener('visibilitychange', this.visibilityChangeCallback, true);
}
Svar #2
Å kalle removeEventListener() med argumenter som ikke identifiserer noen for øyeblikket registrert EventListener på EventTarget har ingen effekt. Du sender en annen funksjon til det.
Å bruke instansekupé-funksjon bør hjelpe i ditt tilfelle:
ngOnInit() {
document.addEventListener('visibilitychange', this.handleVisibleState, true);
}
ngOnDestroy() {
document.removeEventListener('visibilitychange', this.handleVisibleState, true);
}
handleVisibleState = () => {
let vis = document.visibilityState === 'visible';
this.configsService.update_collab_visible(vis);
}
