项目中遇到一个场景:类似于app.vue页面获取某一个页面组件的数据,因为进入那个组件是通过router-view进入,不是通过组件注入到app.vue,所以使用常规的组件通信获取不到数据,我使用了mitt实现了这个功能。
Vue2 中我们使用 EventBus 来实现跨组件之间的一些通信,它依赖于 Vue 自带的 o n / on/on/emit/$off 等方法,而 Vue3 中移除了这些相关方法,这意味着 EventBus 这种方式我们使用不了,官方建议使用一些外部的辅助库,例如:mitt,支持TS。

1.安装:

npm install mitt

2.创建一个EventBus.ts,放入src\utils文件夹中。

// 事件总线第三方库:
import mitt from 'mitt';
const bus = mitt();
export default bus;

3.组件使用,将数据向外发送

 import bus from '@/utils/EventBus'
setup() {
  // 发送数据
  bus.emit('formValue', formValue.value)
}

4.组件接收数据

 import bus from '@/utils/EventBus'
setup() {
 let organization = ref(false);
// 接收数据
  bus.on('formValue', (formValue:any)=>{
    organization.value = formValue && formValue.source == 7 
  });
}

我的一个道姑朋友
80 声望4 粉丝

星光不问赶路人,岁月不负有心人。