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.