学习Vue:Event Bus 与 Provide/Inject

news/2024/11/23 12:46:29/

在Vue.js中,兄弟组件通信是指两个没有直接父子关系的组件之间如何进行数据传递和通信。为了实现兄弟组件通信,我们可以借助Vue的一些特性,如Event Bus和Provide/Inject。让我们一起来深入了解这些方法,并通过实例来看看如何实现兄弟组件通信。

Event Bus:事件总线

Event Bus是一个空的Vue实例,用于组件之间的事件通信。我们可以在该实例上触发和监听事件,从而实现兄弟组件之间的通信。

创建事件总线

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

兄弟组件A:发送事件

<template><button @click="sendData">发送数据到B组件</button>
</template><script>
import { EventBus } from './EventBus';export default {methods: {sendData() {EventBus.$emit('data-sent', 'Hello from A!');}}
};
</script>

兄弟组件B:接收事件

<template><div><p>从A组件接收到的数据:{{ receivedData }}</p></div>
</template><script>
import { EventBus } from './EventBus';export default {data() {return {receivedData: ''};},created() {EventBus.$on('data-sent', data => {this.receivedData = data;});}
};
</script>

Provide/Inject:提供与注入

Provide/Inject是一种高级的组件通信方式,它允许父组件向子孙组件传递数据。

父组件:提供数据

<template><div><ChildA /></div>
</template><script>
export default {provide: {sharedData: 'Hello from Parent!'}
};
</script>

子组件A:注入数据

<template><div><p>从父组件注入的数据:{{ sharedData }}</p></div>
</template><script>
export default {inject: ['sharedData']
};
</script>

子组件B:同样可以注入数据

<template><div><p>从父组件注入的数据:{{ sharedData }}</p></div>
</template><script>
export default {inject: ['sharedData']
};
</script>

兄弟组件通信在Vue.js中可以通过Event Bus和Provide/Inject来实现。Event Bus是一个事件总线,可以让兄弟组件之间通过触发和监听事件进行通信。而Provide/Inject则允许父组件向子孙组件传递数据。了解这些通信方式将帮助您在不同场景中更好地进行组件之间的数据传递和通信。通过合理地选择合适的通信方式,您可以更好地构建出结构清晰、逻辑合理的Vue应用程序。


http://www.ppmy.cn/news/1033461.html

相关文章

Python|OpenCV-基本使用和图像处理(1)

前言 本文是该专栏的第1篇,后面将持续分享OpenCV计算机视觉的干货知识,记得关注。 OpenCV是基于开源许可的跨平台计算机视觉库,起初OpenCV是由Intel公司开发的,直到后面由非营利组织进行维护。提到OpenCV,就不得不说它提供了大量的图像和视频处理函数,使得计算机视觉的研…

亿发创新中医药信息化解决方案,自动化煎煮+调剂,打造智能中药房

传统中医药行业逐步复兴&#xff0c;同时互联网科技和人工智能等信息科技助力中医药行业逐步实现数字化转型。利用互联网、物联网、大数据等科技&#xff0c;实现现代科学与传统中医药的结合&#xff0c;提供智能配方颗粒调配系统、中药自动化调剂系统、中药煎配智能管理系统、…

各种数据智能类api接口推荐,解放双手和大脑

智能文本纠错&#xff1a;针对字词错误、标点、地名、专有名词、敏感信息、意识形态等进行智能校对&#xff0c;降低校对成本&#xff0c;提高校对效率和准确率。人脸检测&#xff1a;快速检测图片中的人脸并返回人脸位置&#xff0c;输出人脸关键点坐标&#xff0c;支持识别多…

vue-cli前端工程化——创建vue-cli工程 router版本的创建 目录结构 案例初步

目录 引出创建vue-cli前端工程vue-cli是什么自动构建创建vue-cli项目选择Vue的版本号 手动安装进行选择创建成功 手动创建router版多了一个router 运行测试bug解决 Vue项目结构main.jspackage.jsonvue.config.js Vue项目初步hello案例 总结 引出 1.vue-cli是啥&#xff0c;创建…

使用phpstorm开发调试thinkphp

1.环境准备 1.开发工具下载&#xff1a;PhpStorm: PHP IDE and Code Editor from JetBrains 2.PHP下载&#xff1a;PHP: Downloads 3. PHP扩展&#xff1a;PECL :: Package search 4.用与调试的xdebug模块&#xff1a; Xdebug: Downloads xdebug模块&#xff0c;如果是php8以…

微信小程序云开发快速入门(2/4)

前言 我们对《微信小程序云开发快速入门&#xff08;1/4&#xff09;》的知识进行回顾一下。在上章节我们知道了云开发的优势以及能力&#xff0c;并且我们还完成了码仔备忘录的本地版到网络版的改造&#xff0c;主要学习了云数据库同时还通过在小程序使用云API直接操作了云数…

django中使用ajax发送请求

1、ajax简单介绍 浏览器向网站发送请求时 是以URL和表单的形式提交的post 或get 请求&#xff0c;特点是&#xff1a;页面刷新 除此之外&#xff0c;也可以基于ajax向后台发送请求&#xff08;异步&#xff09; 依赖jQuery 编写ajax代码 $.ajax({url: "发送的地址"…

toB 业务分析

1、 如何透彻分析B端客户的需求&#xff1f; - 知乎我在讲《如何分析客户需求》这门课时&#xff0c;经常会问学员&#xff1a;“开发客户的最大困难是什么&#xff1f;”有人说价格高不好卖&#xff0c;有人说客户需求不好把握&#xff0c;有人说客户地处偏远&#xff0c;素养…