如何在angular中创建和触发自定义事件

时间:2019-05-20 15:08:21

标签: angular angular-event-emitter

我是Angular的新手,并且我已经阅读了有关事件绑定的信息,因此可以执行以下操作:

<button (click)="doSomething()"></button>

我想知道是否可以创建自定义事件并执行相同的操作。假设我想要一个自定义事件,例如:deleteItem,是否可以执行这样的操作?又如何?

<my-component (deleteItem)="doSomething()"></my-component>

3 个答案:

答案 0 :(得分:1)

当然,您可以使用eventEmitter 在my-component ts文件中添加此

 @Output() deleteItem= new EventEmitter();

当您想发起活动时,请执行此操作

  this.deleteItem.emit();

您还可以像这样传递数据

  this.countUpdate.emit({value: some data });

然后像这样在父组件中捕获它

<my-component (deleteItem)="doSomething($event)"></my-component>

以及父ts文件

    doSomething(event)
    { 
       console.log(event);
    }

答案 1 :(得分:1)

您应该查看Angular的文档示例,以了解 parent监听子事件

您使用@Output()装饰器声明一个类属性,并将其实例化到新的EventEmitter实例。

Angular docs

中的示例
import { Component, EventEmitter, Input, Output } from '@angular/core';

@Component({
  selector: 'app-voter',
  template: `
    <h4>{{name}}</h4>
    <button (click)="vote(true)"  [disabled]="didVote">Agree</button>
    <button (click)="vote(false)" [disabled]="didVote">Disagree</button>
  `
})
export class VoterComponent {
  @Input()  name: string;
  @Output() voted = new EventEmitter<boolean>();
  didVote = false;

  vote(agreed: boolean) {
    this.voted.emit(agreed);
    this.didVote = true;
  }
}

请记住,最好始终在EventEmitter发出值时向其添加通用类型。

如果事件发出布尔值,则应使用@Output() eventName = new EventEmitter<boolean>();

实例化它

上面的组件可以与<app-voter (voted)="handleVote($event)"></app-voter>的父组件一起使用

答案 2 :(得分:0)

EventEmitter可用于创建自己的自定义事件,eventemitter是角度框架中的对象。

@Output() deleteItem= new EventEmitter<{itemName:string}>(); ItemName=''; this.deleteItem.emit({ItemName=this.itemName});