代码实现
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);
