1 | 在vue中,可以利用EventBus来派发和接收事件 |
参考:Vue $on api
1 | // es5实现eventBus实例 |
ES6实现按照下列结构改造即可1
2
3
4
5
6
7
8
9
10
11
12
13class EventBusClass2 {
constructor () {
this.eventObj = {}
}
on (event, fn) {
}
once (event, fn) {
}
emit (event, msg) {
}
off (event) {
}
}
测试:1
2
3
4
5
6
7
8
9
10
11
12
13<button onClick="on_a()">订阅A事件</button>
<button onClick="on_b()">订阅B事件</button>
<br>
<button onClick="once_a()">订阅A事件一次</button>
<button onClick="once_b()">订阅B事件一次</button>
<br>
<button onClick="emit_a()">派发A事件</button>
<button onClick="emit_b()">派发B事件</button>
<br>
<button onClick="off()">销毁A</button>
<button onClick="off_all()">销毁所有</button>
<br>
<button onClick="chain()">链式调用:订阅A事件,派发A事件</button>
1 | const EventBus = new EventBusClass() |
以上只实现了一个简易版的EventBus,更多的参数支持和复杂情况未作处理,详细实现可查看Vue源码 eventsMixin方法