亲宝软件园·资讯

展开

vue3事件总线

张彦鹏的博客 人气:0

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')
}

加载全部内容

相关教程
猜你喜欢
用户评论