项目中遇到一个场景:类似于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
});
}
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。