Angular 2 Emisores de eventos vs Sujeto


En Angular 2 ¿cuál es la diferencia entre Emisor de Eventos y Sujeto para anunciar un evento? Parece que los emisores de eventos son menos complicados de declarar....¿Qué camino prefiere Angular 2?

dataRefreshEvent = new EventEmitter();

private companyDataAnnouncedSource = new Subject();
companyDataAnnouncedSource$ = this.companyDataAnnouncedSource.asObservable();
 31
Author: Ka Tech, 2016-10-25

3 answers

No Hay mucha diferencia. EventEmitter extiende Subject.

El equipo Angular2 enfatizó el hecho de que EventEmitter no debe usarse para nada más que @Output() s en componentes y directivas.

El equipo Angular ha declarado que pueden cambiar la implementación subyacente de EventEmitter y romper el código de usuario que usa EventEmitter para algo para lo que no estaba destinado. Esa es la principal diferencia.

 51
Author: Günter Zöchbauer,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2018-04-03 13:06:34

También EventEmitter se limpia automáticamente a diferencia de custom Subjects que necesita para darse de baja en el gancho de ciclo de vida onDestroy.

 12
Author: Pro7ect,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-10-02 16:46:32

EventEmitter por defecto es síncrono, mientras que el Sujeto no lo es. Puede pasar una bandera a EventEmitter para que sea asíncrona.

 0
Author: justMe,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2018-07-19 09:57:58