Vue3 - 事件 API 新标准(如何在 Vue3 中怎么用事件总线实现兄弟组件通信?相比 Vue2 有什么不同?)

news2025/7/15 1:25:12

前言

对比 Vue2 ,引出并展开 Vue3 。

本文讲述了事件 API 在 Vue3 中相比 Vue2 有什么变化,以及使用方法和代码示例详细讲解。

回忆 Vue2

大家在写 Vue2 项目时,兄弟组件之间传参,我相信很大一部分开发者都会借助全局的事件总线,在外部定义一个总线(eventBus),利用这个总线来实现两个兄弟组件的传参,而且不需要涉及父组件。

我们来回顾一下 Vue2 这种方式如何实现的。

首先,我们会在组件之外定义一个全新 Vue 实例作为组件间通信的 桥梁,只有这样才能让两个毫无关联的组件建立关联。

bug.js:

import Vue from 'vue'
export default new Vue()

A 组件:

<template>
  <div>
      <h1>A.vue</h1>
      <button @click="send()">向B组件发送消息</button>
  </div>
</template>

<script>
// 引入 "桥梁"
import Bus from '@/assets/bus.js'
export default {
  methods: {
      // 跟普通的$emit一样,只不过是给到了Bus桥梁上
      send() {
        Bus.$emit('msg', "你好,我是A.vue 传递过来的数据!")
      }
  },
  
  // 销毁事件
  beforeDestroy () {Bus.$off('msg') },
}
</script>

B 组件:

<template>
  <div>
      <h1>B.vue</h1>
      <p>{{ msg }}</p>
  </div>
</template>

<script>
// 引入 "桥梁"
import Bus from '@/assets/bus.js'
export default {
    data() {
        return {
        	// 展示通信数据
            msg: '...'
        }
    },
    
    // 订阅消息
    mounted() {
    	// 监听事件触发
        Bus.$on('msg', msg => {  
            // console.log("A.vue组件收到bus消息:", msg); 
            this.msg = msg// 赋值展示
        })
    }
}
</script>

找个页面,把两个组件引过来:

<template>
  <div>
      <A />
      <B />
  </div>
</template>

<script>
import A from '@/components/A.vue'
import B from '@/components/B.vue'
export default {
  components: { A, B }
}
</script>

结果:

在这里插入图片描述

可以看到,大部分开发者会以为这种实现方式似乎已经很完美了。你看,它不与父组件关联,也不需要太多的逻辑,很好啊!

但是,我需要给这些开发者破瓢冷水,Vue 官方这样说的,它说在绝大多数情况下,不鼓励开发者使用全局的事件总线在组件之间进行通信。虽然在短期内往往是最简单的解决方案,但从长期来看,它维护起来总是令人头疼。

那么问题来了,你不建议用了,那我们兄弟组件怎么传参啊?难不成两兄弟一拍两散!

切入 Vue3

Vue3 中,因为已经移除掉了实例上 $on / $off / $once 方法,所以你想借助这些 API 从一个组件内部监听其自身触发的事件已经不再可能了。但需要注意的是 $emit 仍然存在,因为它用于触发由父组件声明式添加的事件处理函数,我们还得用这个玩意父子组件通信呢!

vue3 官方讲到,事件总线模式可以被替换为使用外部的、实现了事件触发器接口的库,

例如 mitt 和 tiny-emitter,也就是说 你用这些库就行了!


当然,还可以通过以下方式进行兄弟组件传参,大家在这块简单看一下,知道有这么个事就行了。

在这里插入图片描述

SEO

vue3.js官方文档,vue3事件api官方文档,vue3事件api怎么用,Vue 3.0 事件API,Vue 3事件总线怎么实现,vue3:兄弟组件,跨组件传值,事件总线的通信方式,如何在Vue3中使用事件总线,vue通过全局事件总线实现兄弟组件通信,总结Vue3 的七种组件通信方式,Vue3 事件总线,VUE组件跨通信,vue兄弟组件间的通信(事件总线),Vue组件通信之“全局事件总线-兄弟组件间的通信”,vue3的兄弟组件通信(事件总线),Vue3 - 事件 API 新标准(如何在 Vue3 中怎么用事件总线实现兄弟组件通信?相比 Vue2 有什么不同?)。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/8475.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Kubernetes 系统化学习之 POD原理篇(二)

1. Kubernets 概览回顾 Pod、Service、Volume 和 Namespace 是 Kubernetes 集群中四大基本对象&#xff0c;它们能够表示系统中部署的应用、工作负载、网络和磁盘资源&#xff0c;共同定义了集群的状态。Kubernetes 中很多其他的资源其实只对这些基本的对象进行了组合。 Pod -…

最全JAVA系列视频教程源码

扫描关注公众号&#xff1a;发送对应消息获取源码&#xff08;下面红色字为发送消息内容,取掉空格哦&#xff09; JAVA 基础&#xff1a; java基础 更适合零基础学员&#xff1a; 自Java语言起源始&#xff0c;循序渐进&#xff0c;知识点剖析细致且每章配备大量随堂练…

Android实现动态换肤-原理篇

学习是一个过程。 文章目录Activity中LayoutInflater加载布局总体时序图LayoutInflater源码讲解&#xff08;api28&#xff09;LayoutInflater设置Factory2实现方式LayoutInflater源码总结Activity中LayoutInflater加载布局总体时序图 LayoutInflater源码讲解&#xff08;api28…

高级UI——Paint(滤镜,颜色通道,矩阵运算)

前言 我们已经详细了解到整个android程序&#xff0c;从启动再到绘制的整体流程&#xff0c;从这中间我们又牵扯出了Canvas绘制图形的画板和我们的Paint控制色彩样式的画笔&#xff0c;那么之前基础篇我们就不进行详细的解释&#xff0c;那些API在之前的基础篇已经公布出来&am…

Typescript 函数类型详解

Typescript 函数 前言 虽然 JS/TS 支持面向对象编程&#xff0c;但大部分时候还是在写函数。函数是一等公民。本文介绍下如何在 TypeScript 中使用函数&#xff0c;包括&#xff1a; 函数类型声明函数参数类型&#xff1a;可选参数、默认参数、剩余参数函数返回值类型this 类…

java#5(数组)

目录 数组 1.数组的完整格式:数据类型[] 数组名 new 数据类型[]{元素1,元素2......}; 2.数组的简化格式:数据类型[] 数组名 {元素1,元素2......}; 3.数组的地址​编辑 4.数组的索引(下标,角标) 5.length的使用(表示数组的长度:有几个元素) 6.数组动态初始化:初始化时指…

Redis事务入门及命令

文章目录Redis 事务入门及命令事务概念Redis 事务概念Redis 事务特性Redis 三个阶段入门代码示例Redis 相关命令MULTIDISCARDEXECWATCHUNWATCHRedis 事务入门及命令 事务概念 数据库事务( transaction )是访问并可能操作各种数据项的一个数据库操作序列&#xff0c;这些操作要…

详解 YUV,一文搞定 YUV 是什么!

YUV 是一个颜色模型&#xff0c;通常用作彩色图像管道的一部分。它对彩色图像或视频进行编码时考虑到了人类的感知&#xff0c;与“直接”的 RGB 表示相比&#xff0c;允许减少色度分量的带宽。历史上&#xff0c;术语 YUV 和 Y’UV 用于电视系统中颜色信息的特定模拟编码。今天…

HTML学生作业网页:使用HTML+CSS技术实现传统文化网页设计题材-西安事变历史纪念馆 10页 带视频 带音乐

Web前端开发技术 描述 网页设计题材&#xff0c;DIVCSS 布局制作,HTMLCSS网页设计期末课程大作业 | 茶文化网站 | 中华传统文化题材 | 京剧文化水墨风书画 | 中国民间年画文化艺术网站 | HTML期末大学生网页设计作业 HTML&#xff1a;结构 CSS&#xff1a;样式 在操作方面上运…

《上海悠悠接口自动化平台》-4.注册用例集实战演示

前言 以注册接口为例&#xff0c;在平台上演示如何维护接口自动化用例 访问地址http://47.108.155.10/login.html 用户名: demo, 密码: demo123 有兴趣的可以自己去查看用例规范 和 运行效果。 API 接口层 先找出注册接口的接口文档&#xff0c;以下是接口文档部分 主要关…

Redis配置哨兵及其机制

目录一、Redis哨兵诞生背景二、关于哨兵三、哨兵机制的基本流程3.1 监控3.2 选主3.3 通知四、关于主观下线和客观下线4.1 主观下线4.2 客观下线五、选主规则3.1 优先级最高的从库得分高3.2 和旧主库同步程度最接近的从库得分高3.3 ID 号小的从库得分高六、配置流程七、总结一、…

网络面试-0x10地址栏输入URL敲入回车后发生了什么?

一、 URL解析 1、 首先判断你输入的是一个合法的URL还是待搜索的关键字 2、如果是URL&#xff0c;对URL进行解析 二、 DNS查询 1、设备 —— 本地DNS服务器 —— xx 递归过程 2、DNS服务器和 顶级域名服务器、二级域名服务器、权威域名服务器之间是迭代过程。 三、 TCP连接 …

redis和selery相关知识点

目录标题一&#xff1a;redis字符串操作二&#xff1a;redis hash操作三&#xff1a;redis列表操作四&#xff1a;redis管道1.redis数据库&#xff0c;是否支持事务&#xff1f;2.redis代码实现事务五&#xff1a;redis其他操作六&#xff1a;django中集成redis1.方式一:直接使…

用python就获取到照片拍摄时的详细位置【源码公开】

文章目录一.引言1.读取照片信息&#xff0c;获取坐标2.通过baidu Map的API将GPS信息转换成地址。二.源码附上&#xff01;&#xff01;&#xff01;注意事项一.引言 先看获取到的效果 拍摄时间&#xff1a;2021:12:18 16:22:13 照片拍摄地址:(内蒙古自治区包头市昆都仑区, 内…

pytorch从零开始搭建神经网络

目录 基本流程 一、数据处理 二、模型搭建 三、定义代价函数&优化器 四、训练 附录 nn.Sequential nn.Module model.train() 和 model.eval() 损失 图神经网络 基本流程 《PyTorch深度学习实践》完结合集_哔哩哔哩_bilibili1. 数据预处理&#xff08;Dataset、…

由浅入深,一起来刷Java高级开发岗面试指南,明年面试必定无忧!

前言 我只想面个CV工程师&#xff0c;面试官偏偏让我挑战造火箭工程师&#xff0c;加上今年这个情况更是前后两男&#xff0c;但再难苟且的生活还要继续&#xff0c;饭碗还是要继续找的。在最近的面试中我一直在总结&#xff0c;每次面试回来也都会复盘&#xff0c;下面是我根…

为啥50岁以后,病就增多了?中老年人想要少生病,该做些什么?

人到中年&#xff0c;生活会有很多变化&#xff0c;很多男性朋友从以前别人口中的小伙子&#xff0c;变成现在家里的顶梁柱&#xff0c;很多以前别人口中的小姑娘&#xff0c;变成现在的贤妻良母&#xff0c;或者拥有自己的一番事业。角色在变化的同时&#xff0c;身体情况也发…

高压电气系统验证

纯电和混合动力汽车中的高压电气系统关乎整车的能耗和安全&#xff0c;需要在部件及整车开发阶段做全面的测试与验证。符合ISO 21498*标准的电压、电流一体式测量模块CSM HV BM系列产品&#xff0c;可以直接串联在整车级别的高压电气线缆中&#xff0c;安全可靠的完成高压电气系…

java面试强基(2)

字符型常量和字符串常量的区别? 形式 : 字符常量是单引号引起的一个字符&#xff0c;字符串常量是双引号引起的 0 个或若干个字符。 含义 : 字符常量相当于一个整型值( ASCII 值),可以参加表达式运算; 字符串常量代表一个地址值(该字符串在内存中存放位置)。 占内存大小 &…

SpringCloud 核心组件Feign【远程调用自定义配置】

目录 1&#xff0c;Feign远程调用 1.1&#xff1a;Feign概述 1.2&#xff1a;Feign替代RestTemplate 1&#xff09;&#xff1a;引入依赖 2&#xff09;&#xff1a;添加注解 3&#xff09;&#xff1a;编写Feign的消费服务&#xff0c;提供服务 4&#xff09;&#xff1a;测…