Angular2 EventEmitter

可能你对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"

再来回顾一下:对象

  • putRingOnIt是在SingleComponent的outputs配置项中定义的;
  • ringWasPlaced是ClubComponent中的一个方法;
  • $event包含被触发事件参数(输出的内容),在这个例子中是一个字符串。

 

摘自:《Angular权威教程》第78页blog

相关文章
相关标签/搜索