由于Vue3.x中删除了on 和 off,因此不能借助于一个单独的Vue实例来实现全局事件的发布和订阅与取消订阅(也就是跨组件通讯)

安装mitt库

npm i mitt -S

使用mitt库

在单独的文件暴露出事件总线对象

// mitt库默认导出的是一个函数,我们需要执行它从而得到事件总线的对象
/* eventbus.js */
import mitt from 'mitt'
const emitter = mitt()
export default emitter

在指定组件中导入并使用它

/* one.vue */
// 模板代码
<button @click="send">sure</button>  

// 导入事件总线
import emitter from "@/utils/eventbus.js";  
// methods代码
send(){
    // 触发自定义总线why,并传入一个对象
     emitter.emit("updateList",{name:'bbv',age:22})
}
/* two.vue */

// 导入事件总线
import emitter from "./utils/eventbus.js";

// 注册updataList事件总线
created(){
    emitter.on("updateList",msg=>{ console.log(msg) }) }

取消所有的mitt事件

emitter.all.clear()

取消指定的mitt事件

// 回调定义在外部,类似于setTimeout
function onXxx(){}
emitter.on('foo',onXxx) //监听
emitter.off('foo',onXxx) //取消监听

 

posted on 2022-02-21 18:11  铭の  阅读(1115)  评论(0编辑  收藏  举报

友情链接:箫竹影(Java工程师)