在Angular 2中,Event Emitter和Subject宣布活动有什么区别?似乎事件发射器的声明不那么复杂...... Angular 2首选哪种方式?
dataRefreshEvent = new EventEmitter();
private companyDataAnnouncedSource = new Subject();
companyDataAnnouncedSource$ = this.companyDataAnnouncedSource.asObservable();
答案 0 :(得分:72)
没有太大区别。 EventEmitter
扩展了Subject
。
Angular2团队强调了这样一个事实,EventEmitter
不应该用于组件和指令中的@Output()
之外的其他任何事情。
Angular团队has stated,他们可能会更改EventEmitter
的基础实施,并破坏使用EventEmitter
的用户代码,以达到其目的。这是主要区别。
答案 1 :(得分:18)
同样EventEmitter
会自动清除,而不像您需要在Subjects
生命周期挂钩中取消订阅的自定义onDestroy
。
答案 2 :(得分:1)
EventEmitter默认情况下是同步的,而Subject不是。 您可以将标志传递给EventEmitter以使其异步。