一、安装依赖mitt
npm install mitt
二、导出模块mitt
在src目录下创建utils文件夹,在该文件夹下创建mybus.ts文件
import mitt from 'mitt';
const mitter = mitt();
const bus: any = {
$emit: mitter.emit,
$on: mitter.on,
$off: mitter.off
}
export {
bus
}
三、在main.ts 中引入
import { createApp } from 'vue'
import App from './App.vue'
import { bus } from "./utils/mybus"
const app = createApp(App)
app.config.globalProperties.$bus = bus
四、在项目中使用
这里要用到proxy,我们可以提前封装一下兼容ts的写法
在src/utils目录下创建useCurrentInstance.ts文件:
import { ComponentInternalInstance, getCurrentInstance } from 'vue'
export default function useCurrentInstance(): any {
const { appContext } = getCurrentInstance() as ComponentInternalInstance
const proxy = appContext.config.globalProperties
return {
proxy
}
}
然后再需要使用的页面:
import useCurrentInstance from '@/utils/useCurrentInstance'
const { proxy } = useCurrentInstance()
//发送
proxy.$bus.$emit('currentRoute', item) //发送当前路由信息
//接受
proxy.$bus.$on('currentRoute', (item: RouteRecordRaw) => { //RouteRecordRaw是当前路由对象类型,可从vue-router中取
console.log(item, '监听点击menu时传到父组件的数据')
})