首页 > 解决方案 > 角度:EventEmitter 在嵌入式组件中未定义

问题描述

我正在学习角度,但我遇到了一个问题:我在主组件中有一个组件,我想发出一个事件,但我遇到了一个错误。这是我的代码:

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');
  }
}

这是该组件的 html 代码:

开始游戏结束游戏

这是app-rootcomponent html:

<div>
    <app-game-control (numberGenerated)="numberGeneratedEvent($event)">
    </app-game-control>
    <hr>
    <br>
</div>

但是当我点击“开始游戏”按钮时,我从所附图片中得到了错误: 错误

请注意,这是一个窗口,而不是一个组件。我做错了什么?

标签: javascriptangulareventemitterangular-event-emitter

解决方案


试试这个:

this.game = setInterval(() => this.generateEvent(), 1000);

这似乎是不必要的额外函数调用层,但它对于this维护上下文的方式很重要。


推荐阅读