UNPKG

d-utils

Version:

d-utils

32 lines (31 loc) 1.26 kB
/** * d-utils version: 4.0.3 * by ifmiss */ import{_ as n}from"../_tslib-05983193.js"; /** * 一个简单的发布订阅者模式 */var e=/** @class */function(){function e(){} /** * on 方法 添加监听事件 */return e.on=function(n,r){var t={fn:r,type:"on",name:n};return Object.keys(e.handler).includes(n)?(e.handler[n].push(t),e):(e.handler[n]=[].concat(t),e)}, /** * off 方法 移除监听事件 */ e.off=function(n,r){var t=e.handler[n];if(t)for(var o=t.length-1;o>=0;o--)t[o].fn===r&&t.splice(o,1);return e}, /** * emit 方法 触发监听的事件 */ e.emit=function(r){for(var t=this,o=[],a=1;a<arguments.length;a++)o[a-1]=arguments[a];var c=e.handler[r],l=[];c&&c.length&&c.forEach((function(e,r){var a;(a=e.fn).call.apply(a,n([t],o)), // 如果有只监听一次的事件 "once"!==e.type&&l.push(c.slice(r,r+1))}));var f=c&&c.length&&c.some((function(n){return"once"===n.type})); // 这里做一个执行完成之后的 once代码 off 的操作 return f&&(e.handler[r]=l),e}, /** * once 方法 添加事件 只会被执行一次 */ e.once=function(n,r){e.on(n,r),e.handler[n][0].type="once"}, /** * 键值对 对应事件名称以及数组的值 */ e.handler={},e}();export default e;