有人可以指向一个像样的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')
}
提前致谢!
答案 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(...))
例程提供语法糖。