Vue 组件间通信
1. 组件间通信的概念
指 Vue 项目中不同组件(如父子组件、兄弟组件、跨层级组件)之间传递数据、事件或状态的机制,是组件化开发中实现功能协同的基础。
2. 组件间通信解决了什么问题
- 实现组件间的数据共享(如父子组件传递用户信息);
- 完成组件间的行为联动(如子组件触发父组件的弹窗);
- 解耦组件逻辑,让单个组件更独立、可复用。
3. 组件间通信的分类
按组件关系可分为三类:
- 父子组件通信:最常见的通信场景(如父传子、子传父);
- 兄弟组件通信:同一父组件下的子组件之间通信;
- 跨层级 / 任意组件通信:非直接嵌套的组件(如爷孙组件、无关联组件)之间通信。
4. 组件间通信的方案(Vue2 常用)
| 通信场景 | 方案 | 说明 |
|---|---|---|
| 父→子 | props | 父组件通过属性传递数据,子组件用props接收 |
| 子→父 | $emit + 自定义事件 | 子组件触发this.$emit('事件名', 数据),父组件通过@事件名监听 |
| 父子 / 跨层级 | $parent / $children | 直接访问父 / 子组件实例(不推荐,耦合性高) |
| 跨层级 | $attrs / $listeners | 传递未被props接收的属性 / 事件,配合v-bind="$attrs"/v-on="$listeners"透传 |
| 跨层级 / 任意组件 | Vuex | 全局状态管理库,统一存储和修改数据 |
| 任意组件 | 事件总线(EventBus) | 基于 Vue 实例的$on/$emit实现(Vue2 中需自行创建,如new Vue()) |
| 跨层级 | provide / inject | 父组件provide提供数据,后代组件inject注入(适用于深度嵌套场景) |



