ES6 Classes Event Emitter - PullRequest
0 голосов
/ 26 мая 2018

Может ли кто-нибудь указать мне на достойный EventEmitter (ES6), чтобы использовать события emit глобально для разных классов?Желательно с примерами?Я нашел целую дюжину, но ни одного с работающими примерами между классами(не реальный код):

import emitter from 'SingleTonEmitter';
export class Listener(){
const myEmitter = new Emitter()
myEmitter.on('somethingHappened', (data) => this.onChange())
}

// NEW sepatate class
import emitter from 'SingleTonEmitter';
export class DispatchClass(){
const myEmitter = new Emitter()
myEmitter.dispatch('somethingHappened','optionalData')
}

Заранее спасибо!

1 Ответ

0 голосов
/ 26 мая 2018

RxJS субъекты могут выступать в качестве генераторов событий общего назначения.Шаблон Singleton естественным образом обрабатывается модулями JS, поскольку они оцениваются только один раз и, следовательно, не относятся к реализации класса генератора событий.

Вот как это делается в RxJS 6:

import { Subject } from 'rxjs';
import { filter } from 'rxjs/operators';

export const filterEvent = event => filter(e => e.event === event);

export default new Subject();

import emitter, { filterEvent } from './emitter';

emitter
.pipe(filterEvent('foo'))
// or
// .pipe(filter(({ event }) => event === 'foo')))
.subscribe(e => {
  console.log(e.data)
});

emitter.next({ event: 'foo', data: {...} });

RxJS Subject используется в Угловой EventEmitter реализации .

Существует несколько классов предметов, которые имеют свои отличительные черты и могут быть предпочтительными в некоторых случаях.

Subject класс может быть расширен, чтобы обеспечить синтаксический сахар для pipe(filter(...)) подпрограммы при необходимости.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...