dyb881 / multi-events

Multi-event's tool for subscription and publishing

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

multi-events

NPM version build status Test coverage

简介

用来处理多个订阅事件和方法的订阅发布模块

安装

npm install multi-events

NPM

用法

初始化

const MultiEvent = require('multi-events');

const event = new MultiEvent(option);

option

修改默认event别名对象,可以不传递参数,按照默认配置。详情

属性

名称 场景 注意
eventsCount 获取当前实例订阅事件的数量 只读
eventKeyCount 获取当前实例订阅事件名的数量 只读

方法

emit

触发单个或多个订阅事件
第一个参数是订阅事件名,当是多个事件订阅时,可以传入数组。

event.emit(event, params)  
event.emit([ 'event1', 'event2' ], params)  

on

订阅多个事件、监听触发多个方法,返回当前监听id,用于卸载方法。
注意,传入是单个订阅事件时,返回的是个Symbol对象;当传入多个订阅事件,返回的则是个对象。

const id1 = event.on([ 'event1', 'event2' ], fn); // 返回 { event1: Symbol(event1), event2: Symbol(event2) }  

const id2 = event.on('event1', [fn1, fn2]); // Symbol(event1);  

const id3 = event.on([ 'event1', 'event2' ], [fn1, fn2]); // {   event1: Symbol(event1), event2: Symbol(event2) }  

once

订阅事件只会触发一次就会被移除,后面再次emit将不再触发 具体使用方法和on方法一致

removeEvent

卸载当前订阅事件的所有方法,传入订阅事件名
如果仅仅是需要移除某个方法时候,可以考虑用removeEventFunction方法

event.removeEvent('event');  // true or false  
event.removeEvent([ 'event1', 'event2' ]);  // [ true, true ]  

removeEventFunction

卸载单个订阅的方法,传入订阅事件的唯一id
在用于卸载的方法时候,需要用到on方法的返回值,虽然它会返回单个symbol或object类型,但是如果仅仅是需要移除当前on的订阅事件的话,直接将它传入该方法即可,不用关心它的类型

event.removeEventFunction(id1);  // 移除整个id1.event1、id1.event2监听事件  返回[ true, true ],内部会解析为event.removeEventFunction([ id1.event1, id1.event2 ])  
event.removeEventFunction([ id1 ]);  // 返回[ true, true ],和上面表示一致  
event.removeEventFunction([ id1, id2, 'undefined' ]);  // 返回[ true, true, false ]  
event.removeEventFunction([ id1.event1, id2 ]);  // 只用传id2即可,因为本身就是symbol类型,返回 [ true, true ]  
event.removeEventFunction([ id1.event1, id3.event1 ]);  // 返回[ true, true ]  

event

通过emit函数调用,和普通订阅事件用法一致。

名称 场景 callback
trigger 当触发emit的时候触发,相同的事件只会触发一次 Function(eventName, triggerParams)
remove 当事件或方法被移除的时候触发,包括:removeEvent,removeEventFunction Function(eventName, [ EventSub ])

可以通过在初始化的MultiEvent类的时候修改这些字段,例如:

const event = new MultiEvent({
  trigger: 'emitFn'
})
event.on('myEvent', () => {
    console.log(1);
})

event.on('emitFn', (eventName, params) => {
  console.log(eventName, params); // myEvent, [ 'params1' ]
})

event.emit('myEvent', 'params1');

About

Multi-event's tool for subscription and publishing

License:MIT License


Languages

Language:TypeScript 67.9%Language:JavaScript 32.1%