🔹🔹🔹 vue 通信方式 eventBus

没啥关系的两个组件,

找破天,都找不到啥关系的两个组件。

数据占比比较多,事件的话还要监听:

用vuex、用localstorage。


事件占比比较多

eventBus

一、使用方法:

1、在main.js中创建一个空的vue实例作为全局事件总线,同时,将其绑定在vue原型上。

js 复制代码
//main.js
Vue.prototype.$eventBus = new Vue()

2、子组件或兄弟组件,通过$emit来触发事件。

js 复制代码
sendFunc(){
    this.$eventBus.$emit( 'changeFunc' ,  123, 'abc' )
}

3、父组件或兄弟组件,通过$on来监听事件。

js 复制代码
created(){
    //绑定前需先解绑,避免反复触发、内存泄漏的问题
    this.$eventBus.$off( 'changeFunc' );  
    this.$eventBus.$on( 'changeFunc' , (val1, val2)=>{
        this.msg = val1;
        this.msg2 = val2;
    } )
}

组件监听eventBus中的事件前,一定要记得先解绑。

js 复制代码
created(){
    //this.$eventBus.$off( 'changeFunc' );  
    this.$eventBus.$on( 'changeFunc' , (val)=>{
        this.msg = val;
    } )
}

如上,绑定前不解绑的话,主要有两方面的问题:1、事件反复触发;2、内存泄漏;


很显然,上面是vue2的写法。

什么年代了还在vue2,

下面是vue3的写法:


Vue2 里常用:

js 复制代码
// eventBus.js
import Vue from 'vue'
export const eventBus = new Vue()

// 组件A
eventBus.$emit('sayHello', '你好')

// 组件B
eventBus.$on('sayHello', (msg) => {
  console.log(msg) // 你好
})

那么vue3呢,vue3没有new Vue()了啊。

vue3

  1. vue3 用 mitt
js 复制代码
npm i mitt
  1. 新建 eventBus.js
js 复制代码
// eventBus.js
import mitt from 'mitt'

// 创建一个全局事件总线
const eventBus = mitt()

export default eventBus
  1. 组件A(发送事件)
vue 复制代码
<script setup>
import eventBus from '@/eventBus.js'

function sendMessage() {
  eventBus.emit('sayHello', '你好,我是组件A')
}
</script>

<template>
  <button @click="sendMessage">发送消息</button>
</template>
  1. 组件B(接收事件)
vue 复制代码
<script setup>
import { onMounted, onUnmounted } from 'vue'
import eventBus from '@/eventBus.js'

function handleMessage(msg) {
  console.log('组件B收到消息:', msg)
}

onMounted(() => {
  eventBus.on('sayHello', handleMessage)
})

onUnmounted(() => {
  eventBus.off('sayHello', handleMessage) // 记得销毁,避免内存泄漏
})
</script>

<template>
  <div>我是组件B</div>
</template>

  • 父子组件通信:props / emits
  • 跨层级组件通信:provide / inject
  • 全局状态管理:Pinia(推荐)
  • 非父子组件通信(解耦):eventBus(基于 mitt)

完事了。

相关推荐
恋猫de小郭5 分钟前
Android Studio Panda 2 ,支持 AI 用 Vibe Coding 创建项目
android·前端·flutter
爱学习的程序媛7 分钟前
【Web前端】WebSocket 详解
前端·websocket·网络协议·web
BJ-Giser7 分钟前
Cesium夜晚月亮银河夜空效果
前端·可视化·cesium
happymaker06269 分钟前
web前端学习日记——DAY06(js基础语法与数据类型)
前端·javascript·学习
FlyWIHTSKY9 分钟前
父子组件参数传递
前端·javascript·vue.js
紫_龙17 分钟前
最新版vue3+TypeScript开发入门到实战教程之生命周期函数
前端·javascript·typescript
小江的记录本25 分钟前
【反射】Java反射 全方位知识体系(附 应用场景 + 《八股文常考面试题》)
java·开发语言·前端·后端·python·spring·面试
孟陬26 分钟前
国外技术周刊 #4:这38条阅读法则改变了我的人生、男人似乎只追求四件事……
前端·人工智能·后端
工边页字27 分钟前
cursor接上figma mcp ,图形图像模式傻瓜式教学(包教包会版)
前端·人工智能·ai编程
callJJ28 分钟前
Ant Design Table 批量操作踩坑总结 —— 从三个 Bug 看前端表格开发的共性问题
java·前端·经验分享·bug·管理系统