? ?//一般网上有关于event的js,所以尽量用网上的js
//简单来说就是在root中导入,创建event对象,在created函数里面进行this.$bus.on('命名’,this引用的函数),就是注册事件监听。还有使用app.config.globalProperties.$bus = event,这样就可以在全局使用到event对象了
//在子组件需要在对应函数里面写this.$bus.emit('root命名的名字', 要传递的数据),就是触发事件,就可以让在root里面的对应函数接收相应的数据了
//注意on和emit都可以在event的js自己命名
class Event {
? ? ? constructor() {
? ? ? ? this.listeners = {}
? ? ? }
? ? ? on(name, callback) {
? ? ? ? if (!this.listeners[name]) {
? ? ? ? ? this.listeners[name] = []
? ? ? ? }
? ? ? ? this.listeners[name].push(callback)
? ? ? }
? ? ? off(name, callback) {
? ? ? ? if (!this.listeners[name]) {
? ? ? ? ? throw new Error('还未注册事件监听')
? ? ? ? }
? ? ? ? if (callback) {
? ? ? ? ? this.listeners[name] = this.listeners[name].filter(cb => cb !== callback)
? ? ? ? ? return
? ? ? ? }
? ? ? ? delete this.listeners[name]
? ? ? }
? ? ? emit(name, ...args) {
? ? ? ? if (!this.listeners[name]) {
? ? ? ? ? throw new Error('还未注册事件监听')
? ? ? ? }
? ? ? ? this.listeners[name].forEach(cb => cb(...args))
? ? ? }
? ? }