Angular 2 Event emitters vs Subject
There is not much difference. EventEmitter
extends Subject
.
The Angular2 team stressed the fact though, that EventEmitter
should not be used for anything else then @Output()
s in components and directives.
The Angular team has stated that they may change the underlying implementation of EventEmitter
and break user code that uses EventEmitter
for something it wasn't intended for. That's the main difference.
Also EventEmitter
gets cleaned up automatically unlike custom Subjects
that you need to unsubscribe to in the onDestroy
lifecycle hook.
EventEmitter by default is synchronous, whereas Subject is not. You can pass a flag to EventEmitter to make it asynchronous.
EventEmitter
and Subjects
serve the same purpose - to notify about an event to an observer.
But EventEmitter
should only be used to notify an event from the child to the parent i.e., it should only be used with @Output()
.
To notify about an event across different components, Subjects
should be preferred. Subjects emit the value from one component and any other component can subscribe to it and it'll get notified.