https://www.npmjs.com/package/mitt
import mitt from 'mitt'const emitter = mitt()// listen to an eventemitter.on('foo', e => console.log('foo', e) )// listen to all eventsemitter.on('*', (type, e) => console.log(type, e) )// fire an eventemitter.emit('foo', { a: 'b' })// clearing all eventsemitter.all.clear()// working with handler references:function onFoo() {}emitter.on('foo', onFoo) // listenemitter.off('foo', onFoo) // unlisten
Emmit
- 简单的事件分发;
- 在 react / vue.js / angular 用于跨组件的轻量级实现;
- 事件订阅和发布
- on(eventName: string, callback: Function): listen an event.
- once(eventName: string, callback: Function): listen a event only once.
- fire(eventName: string, …parameters: any[]): emit / trigger an event with parameters.
- off(eventName?: string, callback?: Function): unsubscribe an event. ```typescript export interface Listener { cb: Function; once: boolean; }
export interface EventsType {
}
/**
- const ee = new OnFire(); *
- ee.on(‘click’, (…values) => {}); *
- ee.on(‘mouseover’, (…values) => {}); *
- ee.emit(‘click’, 1, 2, 3);
- ee.fire(‘mouseover’, {}); // same with emit *
ee.off(); */ export default class OnFire {
static ver = ‘VERSION‘;
// 所有事件的监听器 es: EventsType = {};
on(eventName: string, cb: Function, once: boolean = false) { if (!this.es[eventName]) { this.es[eventName] = []; }
this.es[eventName].push({ cb, once, }); }
once(eventName: string, cb: Function) { this.on(eventName, cb, true); }
fire(eventName: string, …params: any[]) { const listeners = this.es[eventName] || [];
let l = listeners.length;
for (let i = 0; i < l; i ++) { const { cb, once } = listeners[i];
cb.apply(this, params);
if (once) {
listeners.splice(i, 1);i --;l --;
} } }
off(eventName?: string, cb?: Function) { // clean all if (eventName === undefined) { this.es = {}; } else { if (cb === undefined) {
// clean the eventName's listenersdelete this.es[eventName];
} else {
const listeners = this.es[eventName] || [];// clean the event and listenerlet l = listeners.length;for (let i = 0; i < l; i ++) {if (listeners[i].cb === cb) {listeners.splice(i, 1);i --;l --;}}
} } }
// cname of fire emit(eventName: string, …params: any[]) { this.fire(eventName, …params); } }
使用jsx on(event_name, callback)
绑定事件,参数为 event_name 和 callback, 当有名字为event_name的事件发生的时候,callback方法将会被执行。
这个方法会返回一个eventObj,这个可以用于使用un(eventObj)方法来取消事件绑定。
one(event_name, callback)
绑定(订阅)事件,参数为 event_name with callback. 当被触发一次之后失效。只能被触发一次,一次之后自动失效。
fire(event_name, data)
触发名字为 event_name 的事件,并且赋予系列变量datas为callback方法的输入值。
fireSync(event_name, data)
同步的方式触发名字为 event_name 的事件,并且赋予系列变量datas为callback方法的输入值。
un(eventObj / event_name)
取消事件绑定。可以仅仅取消绑定一个事件回调方法,也可以直接取消全部的事件。
返回所有的事件名称数组。
clear() 清空所有事件
import onfire from ‘onfire.js’;
// 绑定事件 var eventObj = onfire.on(‘test_event’, function(data1, data2) { console.log(‘this is a event 1’); }); var eventObj2 = onfire.on(‘test_event’, function(data1, data2) { console.log(‘this is a event 2’); });
// 触发事件 onfire.fire(‘test_event’, ‘test_data1’, ‘test_data2’);
// 取消绑定
onfire.un(eventObj); // 取消绑定这个事件.
onfire.un(‘test_event’); // 取消绑定所有的 test_event.
```
