当前位置: 首页 > news >正文

Vue 组件之间的通信

在 Vue.js 中,组件是构建应用程序的基本单位。然而,当你的应用程序变得复杂时,组件之间的通信变得至关重要。本文将介绍几种 Vue 组件之间通信的方式,帮助你更好地管理和组织代码。

父子组件通信

父组件可以通过 props 向子组件传递数据,子组件则可以通过 $emit 向父组件发送事件。

通过 props 传递数据

父组件通过 props 向子组件传递数据:

<!-- 父组件 -->
<template><div><child-component :message="parentMessage"></child-component></div>
</template><script>
import ChildComponent from './ChildComponent.vue';export default {components: {ChildComponent},data() {return {parentMessage: 'Hello from Parent!'};}
};
</script>

子组件通过 props 接收数据:

<!-- 子组件 -->
<template><div><p>{{ message }}</p></div>
</template><script>
export default {props: ['message']
};
</script>
通过 $emit 发送事件

子组件通过 $emit 向父组件发送事件:

<!-- 子组件 -->
<template><div><button @click="sendMessage">Send Message</button></div>
</template><script>
export default {methods: {sendMessage() {this.$emit('message-sent', 'Hello from Child!');}}
};
</script>

父组件监听子组件的事件:

<!-- 父组件 -->
<template><div><child-component @message-sent="handleMessage"></child-component></div>
</template><script>
import ChildComponent from './ChildComponent.vue';export default {components: {ChildComponent},methods: {handleMessage(message) {console.log(message);  // 输出 'Hello from Child!'}}
};
</script>
兄弟组件通信

兄弟组件之间通常通过事件总线(Event Bus)或 Vuex 状态管理来实现通信。

使用事件总线

创建一个事件总线:

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

在兄弟组件中使用事件总线:

<!-- 组件 A -->
<template><div><button @click="sendMessage">Send Message</button></div>
</template><script>
import { EventBus } from './event-bus.js';export default {methods: {sendMessage() {EventBus.$emit('message-sent', 'Hello from Component A!');}}
};
</script>
<!-- 组件 B -->
<template><div><p>{{ message }}</p></div>
</template><script>
import { EventBus } from './event-bus.js';export default {data() {return {message: ''};},created() {EventBus.$on('message-sent', (message) => {this.message = message;});}
};
</script>
使用 Vuex

使用 Vuex 是管理应用程序状态的最佳实践。首先安装并配置 Vuex:

// store.js
import Vue from 'vue';
import Vuex from 'vuex';Vue.use(Vuex);export default new Vuex.Store({state: {message: ''},mutations: {setMessage(state, message) {state.message = message;}},actions: {updateMessage({ commit }, message) {commit('setMessage', message);}}
});

在组件中使用 Vuex:

<!-- 组件 A -->
<template><div><button @click="sendMessage">Send Message</button></div>
</template><script>
export default {methods: {sendMessage() {this.$store.dispatch('updateMessage', 'Hello from Component A!');}}
};
</script><!-- 组件 B -->
<template><div><p>{{ message }}</p></div>
</template><script>
export default {computed: {message() {return this.$store.state.message;}}
};
</script>
父子组件通信与兄弟组件通信总结

理解 Vue 组件之间的通信是开发复杂应用程序的关键。通过 props$emit 进行父子组件通信,以及使用事件总线或 Vuex 进行兄弟组件通信,你可以更有效地管理和组织代码。

相关文章:

  • 嵌入式学习——网络编程(TCP)——day31
  • 短视频矩阵系统----可视化剪辑独立开发(采用php)
  • [STM32]定位器与PWM的LED控制
  • SQL数据库性能优化
  • 【QT】QFont字体设置
  • Ubuntu为sudo指令设置免密码
  • 【FAS】《Liveness Detection on Face Anti-spoofing》
  • 【Python】实现极致:克服PyInstaller打包挑战,解决libpython3.10.so.1.0库丢失难题
  • 教师常用小程序分享
  • AlaSQL.js:用SQL解锁JavaScript数据操作的魔法
  • 十、C语言:数据存储(大端小端存储,整型、浮点型存储)
  • Hadoop3:MapReduce源码解读之Map阶段的TextInputFormat切片机制(3)
  • mysql如何处理无效数据
  • DALL-E 2之学习心得
  • 事务 ---- mysql
  • 《网管员必读——网络组建》(第2版)电子课件下载
  • 30秒的PHP代码片段(1)数组 - Array
  • ECMAScript 6 学习之路 ( 四 ) String 字符串扩展
  • ES6系列(二)变量的解构赋值
  • Java比较器对数组,集合排序
  • Java读取Properties文件的六种方法
  • Linux后台研发超实用命令总结
  • seaborn 安装成功 + ImportError: DLL load failed: 找不到指定的模块 问题解决
  • Swift 中的尾递归和蹦床
  • tab.js分享及浏览器兼容性问题汇总
  • use Google search engine
  • 纯 javascript 半自动式下滑一定高度,导航栏固定
  • 道格拉斯-普克 抽稀算法 附javascript实现
  • 对话:中国为什么有前途/ 写给中国的经济学
  • 官方解决所有 npm 全局安装权限问题
  • 聊聊flink的TableFactory
  • 学习笔记DL002:AI、机器学习、表示学习、深度学习,第一次大衰退
  • 源码安装memcached和php memcache扩展
  • MyCAT水平分库
  • PostgreSQL 快速给指定表每个字段创建索引 - 1
  • 策略 : 一文教你成为人工智能(AI)领域专家
  • 基于django的视频点播网站开发-step3-注册登录功能 ...
  • 扩展资源服务器解决oauth2 性能瓶颈
  • 如何用纯 CSS 创作一个货车 loader
  • ​​​【收录 Hello 算法】10.4 哈希优化策略
  • ​Base64转换成图片,android studio build乱码,找不到okio.ByteString接腾讯人脸识别
  • ​渐进式Web应用PWA的未来
  • (2)MFC+openGL单文档框架glFrame
  • (3)llvm ir转换过程
  • (C语言)共用体union的用法举例
  • (JSP)EL——优化登录界面,获取对象,获取数据
  • (Mirage系列之二)VMware Horizon Mirage的经典用户用例及真实案例分析
  • (补充):java各种进制、原码、反码、补码和文本、图像、音频在计算机中的存储方式
  • (力扣记录)235. 二叉搜索树的最近公共祖先
  • (每日一问)基础知识:堆与栈的区别
  • (实测可用)(3)Git的使用——RT Thread Stdio添加的软件包,github与gitee冲突造成无法上传文件到gitee
  • (数位dp) 算法竞赛入门到进阶 书本题集
  • (顺序)容器的好伴侣 --- 容器适配器
  • (一)Mocha源码阅读: 项目结构及命令行启动
  • (一)Neo4j下载安装以及初次使用