event-emitter

解释: 在小程序开发中,总会遇到事件监听派发的需求,smt-event-emitter是一个订阅发布器。eventsEmitter可通过new EventsEmitter()创建返回。小程序中使用三方npm包方法,见npm使用说明

方法参数

eventsEmitter对象上的方法

名称类型说明
fireMessageFunction派发事件
onMessageFunction监听事件
delHandlerFunction删除事件监听
mergeFunction静态方法,融合多条事件流成为一条

fireMessage方法参数说明

参数类型必填默认值说明
messagestring发布的内容和监听的类型

onMessage方法参数说明

参数类型必填默认值说明
typestring监听类型,如果是*则fireMessage任意类型时,都会执行当前的回调。type为数组时,代表同时监听多个类型
handlerFunction回调函数
optionsObject监听器配置信息

onMessage方法的options参数

参数类型必填默认值说明
onceboolean回调是否只执行一次
listenPreviousEventboolean是否先发布后监听

delHandler方法参数说明:

参数类型必填默认值说明
typestring监听类型,如果传入*则清除所有监听
handlerFunction该 type 下的所有回调函数希望删除的回调函数

merge方法参数说明:

参数类型必填默认值说明
eventsEmitterstring实例化的eventsEmitter对象

代码示例

在开发者工具中预览效果

扫码体验

event-emitter - 图1请使用百度APP扫码

图片示例

event-emitter - 图2

event-emitter - 图3

event-emitter - 图4

安装

  1. npm install @smt-lib/event-emitter

代码示例1

  1. // 订阅发布常规用法
  2. const eventsEmitter = new EventsEmitter();
  3. let a = 0;
  4. eventsEmitter.onMessage('addA', message => {
  5. a += message.num;
  6. });
  7. eventsEmitter.fireMessage({
  8. type: 'addA',
  9. num: 5
  10. });
  11. console.log(a); // 5

代码示例2

  1. // 先发布后订阅
  2. const eventsEmitter = new EventsEmitter();
  3. let a = 0;
  4. eventsEmitter.fireMessage({
  5. type: 'addA',
  6. num: 5
  7. });
  8. eventsEmitter.fireMessage({
  9. type: 'addA',
  10. num: 5
  11. });
  12. eventsEmitter.onMessage('addA', message => {
  13. a += message.num;
  14. }, {
  15. listenPreviousEvent: true
  16. });
  17. console.log(a); // 10

代码示例3

  1. // 监听多个type变化
  2. const eventsEmitter = new EventsEmitter();
  3. let a = 0;
  4. eventsEmitter.onMessage(['addA', 'addB'], message => {
  5. a += message.num;
  6. });
  7. eventsEmitter.fireMessage({
  8. type: 'addA',
  9. num: 5
  10. });
  11. eventsEmitter.fireMessage({
  12. type: 'addB',
  13. num: 5
  14. });
  15. console.log(a); // 10

代码示例4

  1. // 监听类型为*时,执行任何fireMessage都会调用回调
  2. const eventsEmitter = new EventsEmitter();
  3. let a = 0;
  4. let b = 0;
  5. eventsEmitter.onMessage('addA', message => {
  6. a += message.num;
  7. });
  8. eventsEmitter.onMessage('*', message => {
  9. b += message.num;
  10. });
  11. eventsEmitter.fireMessage({
  12. type: 'addA',
  13. num: 5
  14. });
  15. console.log(b); // 5

代码示例5

  1. // 删除某个type下的具体回调
  2. const eventsEmitter = new EventsEmitter();
  3. let a = 0;
  4. let b = 0;
  5. const addA = message => {
  6. a += message.num;
  7. };
  8. const addB = message => {
  9. b += message.num;
  10. };
  11. eventsEmitter.onMessage('addA', addA);
  12. eventsEmitter.onMessage('addA', addB);
  13. eventsEmitter.fireMessage({
  14. type: 'addA',
  15. num: 5
  16. });
  17. eventsEmitter.delHandler('addA', addA);
  18. eventsEmitter.fireMessage({
  19. type: 'addA',
  20. num: 5
  21. });
  22. console.log(a); // 5
  23. console.log(b); // 10

代码示例6

  1. // 删除所有回调
  2. const eventsEmitter = new EventsEmitter();
  3. let a = 0;
  4. const addA = message => {
  5. a += message.num;
  6. };
  7. eventsEmitter.onMessage('addA', addA);
  8. eventsEmitter.onMessage('addB', addA);
  9. eventsEmitter.fireMessage({
  10. type: 'addA',
  11. num: 5
  12. });
  13. eventsEmitter.delHandler('*');
  14. eventsEmitter.fireMessage({
  15. type: 'addB',
  16. num: 5
  17. });
  18. console.log(a); // 5

代码示例7

  1. // 融合多条事件流成为一条
  2. const eventsEmitterA = new EventsEmitter();
  3. const eventsEmitterB = new EventsEmitter();
  4. const mergedEventsEmitter = EventsEmitter.merge(eventsEmitterA, eventsEmitterB);
  5. let a = 0;
  6. mergedEventsEmitter.onMessage(['addA', 'addB'], message => {
  7. a += message.num;
  8. });
  9. eventsEmitterA.fireMessage({
  10. type: 'addA',
  11. num: 5
  12. });
  13. eventsEmitterB.fireMessage({
  14. type: 'addB',
  15. num: 5
  16. });
  17. console.log(a); // 10