注册一个全局的事件总线,来处理页面/组件间的通信
class EventBus{
constructor() {
this.events = {}
}
$on(name,listener) {
if(!name || !listener)return;
if(Array.isArray(name)){
for(let i = 0; i < name.length; i++){
this.$on(name[i],listener);
}
}else{
if(!this.events[name]){
this.events[name] = []
}
this.events[name].push(listener);
}
}
$emit(name) {
if(!this.events)return;
let args = Array.prototype.slice.call(arguments, 1);
for(let key in this.events){
if(this.events.hasOwnProperty(key) && key === name) {
const listener = this.events[name];
if(!listener)return;
for(let i = 0;i<listener.length;i++){
if(typeof listener[i] === 'function') {
listener[i](...args);
}
}
}
}
}
$once(name, listener) {
if(!name || !listener)return;
const that = this;
const _listener = function(){
listener.apply(that,arguments);
that.$off(name);
}
this.$on(name, _listener);
}
$off(name) {
if(!this.events || !name)return;
if(Array.isArray(name)) {
for(let i = 0; i < name.length; i++) {
this.$off(name);
}
}else{
if(this.events[name]){
delete this.events[name];
}
}
}
}
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。