vue2/vue3 EventBus事件总线(用于组件通信)

20 篇文章 6 订阅
3 篇文章 0 订阅
文章介绍了在Vue2中如何通过在main.js中定义$bus进行组件间的通信,而在Vue3中由于移除了$on等事件API,推荐使用mitt库来实现相同功能。提供了在Vue3中使用mitt的示例代码,包括组件A和B之间的通信以及清理监听器的方法。
摘要由CSDN通过智能技术生成

目录

vue2

vue3


vue2

main.js中定义一个新的bus对象并且挂载在原型链上,是全新的Vue实例

Vue.prototype.$bus = new Vue()

A组件  

methods:{
	clickBtn(){
		this.$bus.$emit('clicks', '传值内容文本')
	}
}

B组件 

created(){
	this.$bus.$on('clicks', res=>{
		console.log(res) // 传值内容文本
	})
}

vue3

Vue 3.x 移除了 $on 、 $off 和 $once 这几个事件 API,使得vue3.x不能像2.x一样,不能直接使用EventBus。

vue3 推荐 mitt 和 tiny-emitter,这里使用mitt

// 安装
npm install mitt -S

assets新建个common文件夹,接着再创建event-bus.js(这个文件命名根据你们的情况来定)

// event-bus.js
 
import mitt from "mitt";
 
const EventBus = mitt()
 
export default EventBus

A组件

<template>
    <span @click="onClick"></span>
</template>
 
<script setup>
import { ref } from "vue"
import EventBus from "@common/event-bus"
 
const onClick = () => {
    EventBus.emit("p-click", '父传子文本信息');
}
</script>

B组件

<template>
    <span>{{ text }}</span>
</template>
 
<script setup>
import { ref,onBeforeUnmount } from "vue"
import EventBus from "@common/event-bus"
 
const text = ref('')
 
// 第一种
EventBus.on('p-click', (val)=>{
  text.value = val 
  console.log('获取的值val','val')
})
 
// 另一种写法
const funs = (xxx) =>{
    console.log('接收的值为',xxx)
}
EventBus.on('p-click',funs)
EventBus.off('p-click',funs)
 
 
onBeforeUnmount(() => {
    // 取消单个监听-第一种
    EventBus.off('p-click')
    
    // 全部取消
    EventBus.all.clear()
})
</script>

 扩展:

vue3 常用的组件互相通信(父子、兄弟、爷孙、任意组件)

vue2/vue3 Provide和Inject使用方式

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

余温无痕

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值