ES6课程事件发射器

时间:2018-05-26 11:58:34

标签: javascript events ecmascript-6

有人可以指向一个像样的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 :(得分:0)

RxJS科目可以充当通用事件发射器。单例模式自然由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: {...} });

Angular EventEmitter implementation中使用了RxJS Subject

有几个主题类具有其独特的特征,在某些情况下可能更受欢迎。

如果需要,可以扩展

Subject类以为pipe(filter(...))例程提供语法糖。