簡體   English   中英

ES6類事件發射器

[英]ES6 Classes Event Emitter

有人可以指出我一個體面的EventEmitter(ES6),以在不同類之間全局使用發射事件嗎? 最好有例子嗎? 我發現了很多,但是沒有找到類之間的有效示例。

我會喜歡一個可以用作Singleton的人,所以不必擴展它。

例如(非真實代碼):

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')
}

提前致謝!

RxJS主題可以充當通用事件發射器。 JS模塊自然會處理Singleton模式,因為它們僅被評估一次,因此並不特定於事件發射器類的實現。

這是在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用於Angular EventEmitter實現

有幾門學科都有自己的特色,在某些情況下可能是首選。

如有必要,可以擴展Subject類以為pipe(filter(...))例程提供語法糖。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM