代码实现
pubsub.js
仿照eventBus
let pubSub = {
handlers: {},
once: function ( eventType, handler ) {
this.handlers[eventType] = [handler];
return this;
},
on: function ( eventType, handler ) {
if ( !( eventType in this.handlers ) ) {
this.handlers[eventType] = [];
}
this.handlers[eventType].push( handler );
return this;
},
keepEmit: function ( eventType ) {
var handlerArgs = Array.prototype.slice.call( arguments, 1 );
if ( !this.handlers[eventType] ) {
let self = this;
setTimeout( () => {
self.keepEmit( eventType, ...handlerArgs );
}, 200 );
} else {
for ( var i = 0; i < this.handlers[eventType].length; i++ ) {
this.handlers[eventType][i].call( this, ...handlerArgs );
}
}
return this;
},
emit: function ( eventType ) {
var handlerArgs = Array.prototype.slice.call( arguments, 1 );
var handlers = this.handlers[eventType] || [];
for ( var i = 0; i < handlers.length; i++ ) {
this.handlers[eventType][i].apply( this, handlerArgs );
}
return this;
},
remove: function ( eventType ) {
this.handlers[eventType] = [];
return this;
}
};
if ( window ) {
window.pubSub = pubSub;
}
export default pubSub;
使用示例
import pubSub from '@/lib/pubSub';
pubSub.on('eventName', (data)=>{
console.log(data)
});
...
pubSub.emit('eventName', data);