在开发过程中经常会遇到不同组建之间相互传值的情况 Vue2.0 中一般都是只用自定义bus 但是到了Vue 3.0 作者似乎更推荐使用 mitt 库 今天就记录下mitt 的用法
1.先记录下第一种用法
npm install --save mitt
import mitt from 'mitt'
const bus = mitt()
const app = createApp(App)
app.config.globalProperties.$bus = bus
app.use(store).use(router).mount('#app')
import { getCurrentInstance } from 'vue'
const instance = getCurrentInstance()
const bus = instance.appContext.config.globalProperties.$bus
onMounted(()=> {
bus.on('bro',(value)=> {
console.log('获取其它组建传给我的值' + value)
})
})
import { getCurrentInstance } from 'vue'
const instance = getCurrentInstance()
const bus = instance.appContext.config.globalProperties.$bus
const fn = ()=> {
bus.emit('bro','你是个大傻帽吧.....')
}
全局事件总线的第一种方式就是这样了
2. 全局路由总线的更近一层的用法 provide inject
- 同样在main.js 中导入mitt 插件
- 全局注册provide 局部使用 inject
import { getCurrentInstance } from 'vue'
setup() {
const ins = getCurrentInstance()
const bus = ins.appContext.config.globalProperties.$bus
provide('bus',bus)
}
import { inject } from 'vue'
const bus = inject('bus')
onMounted(()=> {
bus.on('bro',(value)=> {
console.log('兄弟组建给的值' + value)
})
})
import { inject } from 'vue'
const bus = inject('bus')
const Fn = ()=> {
bus.emit('bro',"你是大傻帽........")
}
全局定义局部响应的 的注册方法就完成了
- 具体处理全局事件总线使用哪种方式还要结合自己实际逻辑需要 如果大神有更好的方法或更好的封装还请不吝赐教