Vue教学15:组件间的通信:provide/inject与event bus的巧妙应用

大家好,欢迎回到我们的Vue教学系列博客!在前十四篇博客中,我们学习了Vue.js的基础知识、安装Node.js与npm、使用Vue Devtools进行调试、Vue实例与生命周期钩子、数据绑定(单向与双向)、计算属性与侦听器、条件渲染和列表渲染、事件处理、组件之间的传值(props和$emit)、动态组件和异步组件,以及组件间的通信(provide/inject,event bus)。今天,我们将深入探讨Vue中组件间的通信,这是组件化开发中实现组件协作的关键。无论你是Vue新手小白,还是有一定基础的开发者,掌握组件间的通信都将大大提高你的开发效率。

一、provide/inject:祖先组件向后代组件传递数据

provide/inject是Vue.js中用于祖先组件向后代组件传递数据的一种方式。通过provide/inject,我们可以将数据从祖先组件传递给任意深度的后代组件,而不需要显式地通过props逐层传递。

1. 祖先组件提供数据

在祖先组件中,我们可以通过provide选项提供数据。

// AncestorComponent.vue
<template><div><!-- 祖先组件的模板 --></div>
</template><script>
export default {provide() {return {someData: '这是提供给后代组件的数据'};}
};
</script>

在这个例子中,我们在AncestorComponent组件中通过provide选项提供了一个名为someData的数据。

2. 后代组件接收数据

在后代组件中,我们可以通过inject选项接收祖先组件提供的数据。

// DescendantComponent.vue
<template><div><p>接收到的数据:{{ someData }}</p></div>
</template><script>
export default {inject: ['someData'] // 接收祖先组件提供的数据
};
</script>

在这个例子中,我们在DescendantComponent组件中通过inject选项接收了一个名为someData的数据。

二、event bus:组件间的事件通信

event bus是一种常用的组件间通信方式,它通过创建一个中央事件发射器和事件监听器来实现组件间的通信。

1. 创建event bus

我们可以创建一个Vue实例作为event bus。

// EventBus.js
import Vue from 'vue';const EventBus = new Vue();export default EventBus;

在这个例子中,我们创建了一个名为EventBus的Vue实例。

2. 发射事件

在组件中,我们可以通过EventBus.$emit方法发射事件,并传递数据。

// SomeComponent.vue
<template><div><button @click="sendEvent">发射事件</button></div>
</template><script>
import EventBus from './EventBus.js';export default {methods: {sendEvent() {EventBus.$emit('custom-event', '这是一个自定义事件');}}
};
</script>

在这个例子中,我们在SomeComponent组件中通过EventBus.$emit方法发射了一个名为custom-event的事件,并传递了一个消息。

3. 监听事件

在另一个组件中,我们可以通过EventBus.$on方法监听事件,并接收数据。

// AnotherComponent.vue
<template><div><p>接收到的自定义事件:{{ eventMessage }}</p></div>
</template><script>
import EventBus from './EventBus.js';export default {data() {return {eventMessage: ''};},mounted() {EventBus.$on('custom-event', (message) => {this.eventMessage = message;});}
};
</script>

在这个例子中,我们在AnotherComponent组件中通过EventBus.$on方法监听了一个名为custom-event的事件,并将事件的消息存储在eventMessage数据属性中。

三、总结

通过本博客的学习,我们深入了解了Vue中组件间的通信,包括provide/inject和event bus的使用。组件间的通信是组件化开发中实现组件协作的关键,它可以帮助我们在不同组件之间共享数据和事件。掌握组件间的通信对于使用Vue.js进行前端开发至关重要。希望这篇博客能帮助你深入理解Vue中的组件间的通信,并在实际项目中灵活运用。

如有任何疑问,欢迎在评论区留言讨论。让我们一起学习,共同进步!

往期教学请前往作者VUE专栏下查看

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

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

相关文章

进制之间的转换

文章目录 编译过程进制转换1、进制的概念1.1 二进制1.2 八进制1.3 十六进制 进制在程序中的表现方式十进制转二进制将十进制转换成二进制&#xff08;除2反序取余法&#xff09;二进制转十进制&#xff08;权值法&#xff09; 八进制转十进制将十进制转换成八进制(除8反序取余法…

医药行业五大难题深度剖析:CRM解决方案助力突围

医疗行业关系着民生、经济乃至战备&#xff0c;是国民经济的重要组成部分。虽然近20年来我国医疗行业年均增长率维持在15%之上&#xff0c;但行业发展仍存在诸多问题。引进CRM管理系统可能是一个行之有效的解决方法。文中将为您整理医疗行业目前的五大挑战&#xff0c;以及CRM如…

Android Termux系统安装openssh实现公网使用SFTP远程访问

文章目录 1. 安装openSSH2. 安装cpolar3. 远程SFTP连接配置4. 远程SFTP访问4. 配置固定远程连接地址 SFTP&#xff08;SSH File Transfer Protocol&#xff09;是一种基于SSH&#xff08;Secure Shell&#xff09;安全协议的文件传输协议。与FTP协议相比&#xff0c;SFTP使用了…

Processing基本形状内容和实例

一、Processing的基本形状内容和实例 1.Processing有一组专门绘制基本图形得图案。像线条这样的基本图形可以被连接起来创建更为复杂得形状&#xff0c;例如一片叶子或者一张脸。 2.为了绘制一条直线&#xff0c;我们需要四个参数&#xff0c;两个用于确定初始位置&#xff0c;…

判断连续数据同意特征的方法:插旗法

bool isMonotonic(int* nums, int numsSize) {int flag 2;for (int i 1; i < numsSize; i) {if (nums[i-1] > nums[i]) {if (flag 0)return false;flag 1;}else if (nums[i-1] < nums[i]) {if (flag 1)return false;flag 0;}}return true; }此代码较为简单&…

Sora:AI视频生成的新机遇与挑战

随着科技的飞速进步&#xff0c;人工智能&#xff08;AI&#xff09;和机器学习&#xff08;ML&#xff09;技术已经深入渗透到社会的各个领域。其中&#xff0c;Sora这类基于AI的视频生成工具因其高度逼真的生成能力而备受瞩目。然而&#xff0c;正如一枚硬币有两面&#xff0…

排队方式——栈

Description n个人手拿5元&#xff0c;n个人手拿10元&#xff0c;他们去排队买东西&#xff0c;东西价值5元&#xff0c;老板没有零钱&#xff08;老板必须用收取的5元钞票给支付10元的顾客找零钱&#xff09;&#xff0c;现给出一种排列方式&#xff0c;判断是否合理&#xf…

nVisual+AI实现综合布线智能化运维管理

传统的综合布线系统依据TIA-606规范在配线架、跳线、面板上都粘贴了标签&#xff0c;标签作为一个综合布线项目中元器件的唯一标识&#xff0c;对综合布线日常运维管理过程中查询连接关系、定位设备位置至关重要&#xff0c;但标签所能记录的信息毕竟有限&#xff0c;因此可视化…

docker的简单使用

在一些进行使用靶场或者工具的时候&#xff0c;我们可以用docker在线拉取&#xff0c;就可以省去手动搭建靶场的过程 一、docker的配置 因为docker是默认从docker的官网进行拉取&#xff0c;所以拉取经常速度很慢或者失败&#xff0c;我们先要进行一下配置&#xff0c;让他优…

让照片说话唱歌的软件,盘点这3款!

在数字时代&#xff0c;我们总是渴望找到新的方式来表达自我、分享生活。近年来&#xff0c;随着人工智能和图像处理技术的飞速发展&#xff0c;一种新型的软件应运而生&#xff0c;它们能够让照片“说话”甚至“唱歌”&#xff0c;给我们的生活带来了无限乐趣和创意空间。那么…

探索SRM软件:了解SRM在企业中的作用

作为供应商&#xff0c;对于SRM软件并不陌生&#xff0c;但对于刚刚进入采购行业的新手来说&#xff0c;就可能不太了解这个软件的作用了。现在让我们来科普一下&#xff1a;通常&#xff0c;我们将SRM称为供应商关系管理&#xff0c;其全称为Supplier Relationship Management…

ICVQUANTUMCHINA报告:《2024全球量子通信与安全产业发展展望》发布

2月26日&#xff0c;《2024全球量子通信与安全产业发展展望》的中文版报告通过光子盒官方平台发布&#xff0c;英文版报告通过ICV官方平台发布。 英文版报告获取地址&#xff1a; https://www.icvtank.com/newsinfo/898270.html 亮点 摘要 - 量子通信与安全产业报告呈现了2023…

zerotier局域网组建 笔记

背景 家里的windows电脑&#xff1a;home-win10-pc 家里的windows电脑上vmware运行的ubuntu虚拟机&#xff1a;home-ubuntu-vm 公司的mac电脑&#xff1a;company-mac-pc 由于xxx需求&#xff0c;需要组建一个局域网&#xff0c;前东家都是用的zerotier&#xff0c;出于路径依…

C++中GetPrivateProfileInt用法详解

GetPrivateProfileInt是C中一个用于读取INI文件中指定节(section)和键(key)的整型值的函数。 函数原型&#xff1a; UINT GetPrivateProfileInt( LPCTSTR lpAppName, LPCTSTR lpKeyName, INT nDefault, LPCTSTR lpFileName ); 参数说明&#xff1a; lpAppName&#xff1a;IN…

uniapp版微信小程序授权登录

请求接口code换取openid信息: wxlogin() {let that = thislet token = uni.getStorageSync(weToken)console.log(token)if (token) {wx.reLaunch({url: "/pages/tarbar"})} else {uni.login({provider: weixin, //使用微信登录success: function(res) {const code …

虾皮shopee API在库存管理中的重要性

虾皮&#xff08;Shopee&#xff09;API在库存管理中扮演着至关重要的角色。通过使用Shopee API&#xff0c;商家可以自动化地管理其在线商店的库存&#xff0c;确保库存数据的准确性和实时性。以下是一些虾皮API在库存管理中的重要性&#xff0c;并附有相关代码示例&#xff1…

openssl3.2 - exp - AES-256-GCM

文章目录 openssl3.2 - exp - AES-256-GCM概述AES-256-GCM加密入参AES-256-GCM加密出参AES-256-GCM解密入参AES-256-GCM解密出参笔记END openssl3.2 - exp - AES-256-GCM 概述 工程中要用到对称加密, 没得选, 要用AES256. 在openssl3.2中, AES256加解密的种类有好多种. 查了资…

FreeRTOS操作系统学习——任务管理

任务概念 在FreeRTOS中&#xff0c;一个任务相当于一个线程&#xff0c;可以有很多的任务&#xff0c;每个人任务可以设置不同的优先级。相同优先级的任务轮流使用CPU&#xff0c;高优先级的任务可以一直使用CPU&#xff0c;直到主动放弃&#xff0c;低级的任务才有被执行的机…

深入解析Java 8中的Optional类和Stream API

摘要&#xff1a; Java 8作为Java语言的一个重要版本&#xff0c;引入了许多新特性和改进。其中&#xff0c;Optional类和Stream API是两个非常受欢迎的特性&#xff0c;它们为Java带来了函数式编程的能力。本文将深入探讨Java 8中的Optional类和Stream API&#xff0c;通过两个…

SpringBoot集成数据库界的版本控制工具flyway

Flyway 就是一款数据库界的版本控制工具&#xff0c;它可以记录数据库的变化记录。统一管理所有的 SQL 脚本变更&#xff0c;在所有环境自动同步数据库&#xff0c;而无需人为手工控制&#xff0c;再也不用担心因数据库不同步而导致的各种环境问题。 MySQL环境准备 version: 3…