Angular 2事件发射器vs Subject

时间:2016-10-25 11:18:41

标签: angular

在Angular 2中,Event Emitter和Subject宣布活动有什么区别?似乎事件发射器的声明不那么复杂...... Angular 2首选哪种方式?

dataRefreshEvent = new EventEmitter();

private companyDataAnnouncedSource = new Subject();
companyDataAnnouncedSource$ = this.companyDataAnnouncedSource.asObservable();

3 个答案:

答案 0 :(得分:72)

没有太大区别。 EventEmitter扩展了Subject

Angular2团队强调了这样一个事实,EventEmitter不应该用于组件和指令中的@Output()之外的其他任何事情。

Angular团队has stated,他们可能会更改EventEmitter的基础实施,并破坏使用EventEmitter的用户代码,以达到其目的。这是主要区别。

答案 1 :(得分:18)

同样EventEmitter会自动清除,而不像您需要在Subjects生命周期挂钩中取消订阅的自定义onDestroy

答案 2 :(得分:1)

EventEmitter默认情况下是同步的,而Subject不是。 您可以将标志传递给EventEmitter以使其异步。