如何以角度创建和触发自定义事件

GJC*_*ode 4 angular angular-event-emitter

我是 Angular 的新手,我已经阅读了事件绑定,所以我可以做这样的事情:

<button (click)="doSomething()"></button>
Run Code Online (Sandbox Code Playgroud)

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

<my-component (deleteItem)="doSomething()"></my-component>
Run Code Online (Sandbox Code Playgroud)

小智 12

当然,你可以使用一个eventEmitter 在 my-component ts 文件中添加这个

 @Output() deleteItem= new EventEmitter();
Run Code Online (Sandbox Code Playgroud)

当你想提升事件时,请执行此操作

  this.deleteItem.emit();
Run Code Online (Sandbox Code Playgroud)

你也可以像这样传递数据

  this.countUpdate.emit({value: some data });
Run Code Online (Sandbox Code Playgroud)

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

<my-component (deleteItem)="doSomething($event)"></my-component>
Run Code Online (Sandbox Code Playgroud)

并在父 ts 文件中

    doSomething(event)
    { 
       console.log(event);
    }
Run Code Online (Sandbox Code Playgroud)


Dan*_*iel 5

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

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

Angular 文档中的示例

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;
  }
}
Run Code Online (Sandbox Code Playgroud)

请记住,如果 EventEmitter 发出值,则始终向其添加通用类型是一种很好的做法。

如果一个事件发出一个布尔值,你应该用它来实例化它@Output() eventName = new EventEmitter<boolean>();

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