1:安装

npm i mitt

2:注册

// main.js
import { createApp } from 'vue'
import App from './App.vue'
import mitt from 'mitt' 
 
const app = createApp(App)
app.config.globalProperties.emitter = mitt() // 主要是这行

3:封装一个myEventBus.js

这个文件一个是在页面同意级别的目录下建立的,如src/eventBus/myEventBus.js

import { getCurrentInstance } from 'vue'
 
export default function myEventBus() {
    const internalInstance = getCurrentInstance()
    const emitter = internalInstance.appContext.config.globalProperties.emitter
    return emitter
}

主要是获取emitter的all,emit,off,on的方法
在这里插入图片描述

4:使用(案例)

(1):目录截图
在这里插入图片描述

(2):myEventBus.js,同第三步
(3):index.vue

<template>
  <div class="index">
    <h1>index页面:{{ indexMsg }}</h1>
    <button @click="getBorder">点我</button>
    <Brother />
  </div>
</template>
<script setup>
import Brother from "./brother.vue";
import { ref } from "vue";
import myEventBus from "./myEventBus.js";

const indexMsg = ref("index---张三");

const emitter = myEventBus();
function getBorder() {
  emitter.emit("indexMsg", indexMsg);
}
</script>
<style scoped>
.index {
  width: 200px;
  height: 200px;
  border: 1px solid skyblue;
}
</style>

(4): border.vue

<template>
  <div class="borther">
    <h1>borther:{{ borderMsg }}</h1>
  </div>
</template>
<script setup>
import { onMounted, ref } from "vue";
import myEventBus from "./myEventBus.js";
const borderMsg = ref("");
const emitter = myEventBus();
emitter.on("indexMsg", (value) => {
  console.log("value", value);
  borderMsg.value = value;
});
</script>
<style scoped>
.borther {
  width: 200px;
  height: 100px;
  border: 1px solid red;
}
</style>

5:效果

在这里插入图片描述
这就是一个vue3中eventBus的简单使用了。同理,如果要传方法等的话,在border.vue

emitter.on("indexMsg", (value) => {
  console.log("value", value);
  value(); // 直接调用这个方法获取用一个变量接收后调用即可,其他和传递属性的过程一样
});
GitHub 加速计划 / vu / vue
207.54 K
33.66 K
下载
vuejs/vue: 是一个用于构建用户界面的 JavaScript 框架,具有简洁的语法和丰富的组件库,可以用于开发单页面应用程序和多页面应用程序。
最近提交(Master分支:2 个月前 )
73486cb5 * chore: fix link broken Signed-off-by: snoppy <michaleli@foxmail.com> * Update packages/template-compiler/README.md [skip ci] --------- Signed-off-by: snoppy <michaleli@foxmail.com> Co-authored-by: Eduardo San Martin Morote <posva@users.noreply.github.com> 4 个月前
e428d891 Updated Browser Compatibility reference. The previous currently returns HTTP 404. 5 个月前
Logo

旨在为数千万中国开发者提供一个无缝且高效的云端环境,以支持学习、使用和贡献开源项目。

更多推荐