原生js的“eventemitter 发布订阅”其实跟vue的“bus 中央事件总线”是同一种东西,而我只是用js实现一版出来而已
组件代码:
(function () { var msgService = function msgService() {}; msgService.prototype.on = function (name, callback) { // 接收 var callbacks = this[name]; if (callbacks) { callbacks.push(callback); } else { this[name] = [callback]; } }; msgService.prototype.dispatch = function (name, option) { // 广播 let callbacks = this[name]; callbacks && callbacks.forEach((callback) => callback(option)); }; window.msgService = msgService; })()
调用代码:
var MsgService = new msgService(); MsgService.on("test1", function (data) { // 接收函数被触发后做点事情 console.log("test1被调用:", data); }); MsgService.dispatch("test1", "我是传参"); // 可重复调用多次 MsgService.dispatch("test1", "我是传参"); // 可重复调用多次 MsgService.dispatch("test1", "我是传参"); // 可重复调用多次
MsgService.on("test2", function (data) { // 接收函数被触发后做点事情 console.log("test2被调用:", data); }); MsgService.dispatch("test2", "我是传参"); // 可重复调用多次 MsgService.dispatch("test2", "我是传参"); // 可重复调用多次 MsgService.dispatch("test2", "我是传参"); // 可重复调用多次