以前事件触发用的是jquery的方法,但jquery里面似乎并不是同步触发的,在另一个同事电脑上经常发生异步的情况,因此我自己实现了一个简单版本的事件触发器。
let event=()=>{
let ch={},_evts={}
ch.on=(name,handler)=>{
_evts[name]=_evts[name]||[]
_evts[name].push(handler)
return ch
}
ch.emit=(name,data)=>{
for(let n in _evts){
if(n!==name && n.indexOf(name+".")!=0)continue;
_evts[n].map((handler)=>handler(data))
}
return ch
}
ch.off=(name)=>{
for(let n in _evts){
if(n!==name && n.indexOf(name+".")!=0)continue;
delete _evts[n]
}
return ch
}
return ch
}
// 用法
let e=event()
e.on('click.a1',()=>console.log('click.a1'))
e.on('click.b1',()=>console.log('click.b1'))
e.emit('click') // 输出 click.a1 click.b1
e.emit('click.b1') // 输出 click.b1
e.off('click')
相关文档
暂无
随便看看
畅言模块加载中