可能你对EventEmitter还不太熟悉,不过别担忧,它并不难。
EventEmitter只是一个帮你实现观察者模式①的对象。也就是说,它是一个管理一系列订阅者并向其发布事件的对象。就是这么简单。
来看一个使用EventEmitter的简单小例子:this
let ee = new EventEmitter(); ee.subscribe((name: string) => console.log(`Hello ${name}`)); ee.emit("Nate"); // -> "Hello Nate"
当咱们把一个EventEmitter赋值给一个输出的时候, Angular会自动帮咱们订阅事件。咱们不须要本身订阅。(固然,若是须要,你仍然能够实现本身的订阅逻辑。)spa
下面是一段具备outputs的组件示例代码:code
@Component({ selector: 'single-component', outputs: ['putRingOnIt'], template: ` <button (click)="liked()">Like it?</button> ` }) class SingleComponent { putRingOnIt: EventEmitter<string>; constructor() { this.putRingOnIt = new EventEmitter(); } liked(): void { this.putRingOnIt.emit("oh oh oh"); } }
能够看到咱们作了完整的三步动做:(1) 指定outputs配置项;(2) 建立一个EventEmitter并把它赋值给咱们指定的输出属性putRingOnIt;(3) 当liked方法被调用时,触发这个事件。
若是但愿在一个父级组件中使用这个输出,能够这样作:component
@Component({ selector: 'club', template: ` <div> <single-component (putRingOnIt)="ringWasPlaced($event)" ></single-component> </div> ` }) class ClubComponent { ringWasPlaced(message: string) { console.log(`Put your hands up: ${message}`); } } // logged -> "Put your hands up: oh oh oh"
再来回顾一下:对象
摘自:《Angular权威教程》第78页blog