Javascript 角度:EventEmitter在嵌入式组件中未定义
我正在学习angular,但我遇到了一个问题:我在主组件中有一个组件,我想发出一个事件,但我得到了一个错误。这是我的密码:Javascript 角度:EventEmitter在嵌入式组件中未定义,javascript,angular,eventemitter,angular-event-emitter,Javascript,Angular,Eventemitter,Angular Event Emitter,我正在学习angular,但我遇到了一个问题:我在主组件中有一个组件,我想发出一个事件,但我得到了一个错误。这是我的密码: import { Component, OnInit, Output, EventEmitter } from '@angular/core'; @Component({ selector: 'app-game-control', templateUrl: './game-control.component.html', styleUrls: ['./gam
import { Component, OnInit, Output, EventEmitter } from '@angular/core';
@Component({
selector: 'app-game-control',
templateUrl: './game-control.component.html',
styleUrls: ['./game-control.component.css']
})
export class GameControlComponent implements OnInit {
@Output() numberGenerated: EventEmitter<{v: number}> = new EventEmitter<{v: number}>();
game: any;
constructor() { }
ngOnInit() {
}
startGame() {
this.game = setInterval(this.generateEvent, 1000);
}
stopGame() {
clearInterval(this.game);
}
generateEvent(): void {
const n = Math.floor((Math.random() * 10) + 1);
this.numberGenerated.emit({v: 3});
console.log('event sent');
}
}
从'@angular/core'导入{Component,OnInit,Output,EventEmitter};
@组成部分({
选择器:“应用程序游戏控制”,
templateUrl:'./game control.component.html',
样式URL:['./游戏控制.component.css']
})
导出类GameControlComponent实现OnInit{
@Output()numberGenerated:EventEmitter=新的EventEmitter();
游戏:任何;
构造函数(){}
恩戈尼尼特(){
}
startGame(){
this.game=setInterval(this.generateEvent,1000);
}
停止游戏{
clearInterval(这个游戏);
}
generateEvent():void{
常数n=数学楼层((数学随机()*10)+1);
this.numberGenerated.emit({v:3});
console.log('event sent');
}
}
这是此组件的html代码:
开始比赛
终局
下面是应用程序根组件html:
<div>
<app-game-control (numberGenerated)="numberGeneratedEvent($event)">
</app-game-control>
<hr>
<br>
</div>
请注意,这是一个窗口,而不是一个组件。我做错了什么?试试这个:
this.game = setInterval(() => this.generateEvent(), 1000);
这似乎是一个不必要的额外的函数调用层,但对于维护此上下文的方式来说很重要。作为此传递的函数指针。generateEvent
不携带类GameControlComponent
的特定实例的上下文。当函数以这种方式调用时,函数上下文中的this
没有正确定义。顺便问一下,我的建议解决了问题吗?它解决了问题,但不了解原因。现在我明白为什么了。谢谢,不用担心。没想到是你。:)