当前位置: 首页 > 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 进行兄弟组件通信,你可以更有效地管理和组织代码。

http://www.lryc.cn/news/365528.html

相关文章:

  • Elementary OS 7.1简单桌面调整
  • 【C++ | 析构函数】类的析构函数详解
  • ceph radosgw 原有zone placement信息丢失数据恢复
  • ​​​​【动手学深度学习】残差网络(ResNet)的研究详情
  • freertos初体验 - 在stm32上移植
  • ubuntu使用 .deb 文件安装VScode
  • 9.1.1 简述目标检测领域中的单阶段模型和两阶段模型的性能差异及其原因
  • 系统化自学Python的实用指南
  • 加密货币初创企业指南:如何寻找代币与市场的契合点
  • 【十二】图解mybatis日志模块之设计模式
  • RainBond 制作应用并上架【以ElasticSearch为例】
  • JVM相关:Java内存区域
  • 【C++】─篇文章带你熟练掌握 map 与 set 的使用
  • Mintegral数据洞察:全球中轻度游戏市场与创意更新频率
  • 贝锐蒲公英异地组网:降低建筑工地远程视频监控成本、简化运维
  • 大模型训练学习笔记
  • Linux C/C++时间操作
  • AI绘画工具
  • 图相似度j计算——SimGNN
  • 大模型创新企业集结!百度智能云千帆AI加速器Demo Day启动
  • 阿里云对象存储oss——对象储存原子性和强一致性
  • 星戈瑞 CY5-地塞米松的热稳定性
  • MongoDB CRUD操作:地理位置查询
  • mysql启动出现Error: 2 (No such file or directory)
  • 上位机图像处理和嵌入式模块部署(f407 mcu中的项目开发特点)
  • 插入排序—Java
  • c语言速成系列指针上篇
  • c++ 里函数选择的优先级:普通函数、模板函数、万能引用,编译器选择哪个执行呢?
  • 网鼎杯 2020 玄武组 SSRFMe
  • 纪念日文章:我的博客技术之路——两年回望