代码之家  ›  专栏  ›  技术社区  ›  Buda Gavril

角度:嵌入组件中未定义EventEmitter

  •  1
  • Buda Gavril  · 技术社区  · 6 年前

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

    import component,oniit,output,eventEmitter from'@angular/core';
    
    @组件({
    selector:'应用程序游戏控制',
    模板URL:'./game control.component.html',
    样式URL:'.'/game control.component.css']
    })
    导出类GameControlComponent实现OnInit{
    @output()生成的数字:eventEmitter<v:number>=new eventEmitter<v:number>();
    游戏:任意;
    
    constructor()
    
    ngoninit()号{
    }
    
    开始游戏()。{
    this.game=设置间隔(this.generateevent,1000);
    }
    
    停止游戏()。{
    ClearInterval(本游戏);
    }
    
    GenerateEvent():无效{
    const n=math.floor((math.random()*10)+1);
    此.numberGenerated.Emit(v:3);
    console.log(“发送事件”);
    }
    }
    

    这是此组件的HTML代码:

    开始游戏 结束游戏

    下面是应用程序rootcomponent html:。

    <div>
    <app game control(numberGenerated)=“numberGenerateEvent($event)”>
    </app游戏控制>
    <HR>
    <br>
    </DIV>
    

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

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

    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代码:

    开始游戏 结束游戏

    下面是应用程序rootcomponent html:

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

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

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

    1 回复  |  直到 6 年前
        1
  •  1
  •   kshetline    6 年前

    试试这个:

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

    这看起来像是一个不必要的额外的函数调用层,但是它对于 this 上下文被维护。

    推荐文章