vue3+ts使用bus事件总线的示例代码

1、在vue2中我是这样使用的

//创建一个vueBus.js
import Bus from 'vue';
let install = function (Vue) {
Vue.prototype.$bus = new Bus()
}

export default {
install
};

//在main.js中引入
import vueBus from '@/utils/vueBus';
Vue.use(vueBus);
//可根据this.$bus._events['事件名'] 来查看是否存在该事件监听

2、在vue3中使用

//在vue3中需要使用mitt插件,直接下载即可
//创建vueBus.ts文件
const init_mitt = mitt()
const emitter:any = {
_events:{},
$emit:init_mitt.emit,
$on:function(t:any,e:any){
this._events[t] = true
init_mitt.on(t,e)
},
$off:function(t:any,e:any){
delete this._events[t]
init_mitt.off(t,e)
}
}
export default emitter

//在main.ts中引入使用
import emitter from '@/utils/vueBus';
app.config.globalProperties.$bus = emitter

//如果需要挂在其他的全局变量上,需要到声明文件声明

补充:下面看下vue总线机制(bus)

vue中非父子组件之间通信除了使用vuex,也可以通过bus总线,两者适用场景不同。

bus适合小项目、数据被更少组件使用的项目,对于中大型项目 数据在很多组件之间使用的情况 bus就不太适用了。bus其实就是一个发布订阅模式,利用vue的自定义事件机制,在触发的地方通过$emit向外发布一个事件,在需要监听的页面,通过 $on监听事件。

vuex适用中大型项目、数据在多组件之间公用的情况。

组件通信bus的使用

在utils文件下下创建bus.js

// utils - bus.js
import Vue from 'vue'
const bus = new Vue()
export default bus

一、传值

发送信息

import bus from '@/utils/bus'

第一个参数为标志变量,第二个参数为通信的值

us.$emit('message', 'hello');

接收信息

import bus from '@/utils/bus'

第一个参数为标志变量,第二个参数中的e为通信的值

bus.$on('message', (e) => {
 console.log(e)
})

二、调用方法

一个组件(A)调用另一个组件(B)的方法

B组件的方法

import bus from '@/utils/bus'
mounted () { 
 bus.$on('testA', this.testA) 
},
testA () {
 console.log('由A组件调用')
}

A组件调用

import bus from '@/utils/bus'
mounted () {
 bus.$emit('testA')
}

到此这篇关于vue3+ts使用bus事件总线的文章就介绍到这了,更多相关vue3事件总线内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

你可能感兴趣的:(vue3+ts使用bus事件总线的示例代码)