angular - kaster FEIL TypeError: Kan ikke lese egenskapen 'emit' av undefined
I MyComponent prøver jeg å utløse en annen hendelse fra en hendelseshåndterer. (Denne nye hendelsen vil bli brukt av foreldreakomponenten for å utføre noen handlinger). Jeg opprettet en hendelsesutløser som et medlem av MyComponent, men hendelseshåndteringsmetoden får ikke tilgang til hendelsesutløseren. Den gir ERROR TypeError: Cannot read property 'emit' of undefined. Jeg fant noen relaterte spørsmål på StackOverflow, men kunne ikke forstå mye siden jeg er ny på Angular2.
import { Component, Input, Output, OnChanges, SimpleChanges, OnInit, EventEmitter } from '@angular/core';
import YouTubePlayer from 'youtube-player';
@Component({
selector: 'app-my-component',
templateUrl: './my-component.component.html',
styleUrls: ['./my-component.component.css']
})
export class MyComponent implements OnChanges, OnInit {
@Input()
videoURL = '';
player : any;
videoId : any;
@Output()
myEmitter: EventEmitter<number> = new EventEmitter();
ngOnInit(): void {
this.player = YouTubePlayer('video-player', {
videoId: this.videoId,
width: "100%"
});
this.registerEvents();
}
private registerEvents() {
this.player.on("stateChange", this.onStateChangeEvent);
}
private onStateChangeEvent(event: any) {
console.log("reached here: " + event);
this.myEmitter.emit(1); //throws `ERROR TypeError: Cannot read property 'emit' of undefined`
}
}
Kan noen hjelpe meg? Vennligst merk at jeg bare må sende ut hendelser fra onStateChangeEvent, fordi senere vil jeg ha forskjellige typer hendelsesutsendere for ulike typer hendelser. Så jeg vil sette inn en switch-case inne i onStateChangeEvent og vil bruke forskjellige sendere - en for hver type.
Svar #1
Kan ikke lese egenskapen 'emit' av undefined
Vanligvis forårsaket av feil this. Legg til pil-lambda-syntaksen =>
Fiks
private onStateChangeEvent = (event: any) => {
console.log("reached here: " + event);
this.myEmitter.emit(1); // now correct this
}
Mer
https://basarat.gitbooks.io/typescript/docs/arrow-functions.html
Svar #2
For alle som kom hit for å finne dette, hvis Basarats løsning ikke fungerte, sjekk at linjen over event-emitteren ikke har noen skrivefeil. Jeg hadde en uoppkalt ViewChild over min udefinerte EventEmitter.
