type
status
date
slug
summary
tags
category
icon
password
Vue 组件通信中常用的 6 种方式
在 Vue 项目开发中,组件之间的通信是一项必备技能。本文将为你梳理 Vue 中最常见的 6 种组件通信方式。
一、props 和 $emit:父子组件通信
父组件通过
props 向子组件传递数据,子组件通过 $emit 向父组件发送事件。✅ 适用于:父子组件之间数据和事件传递
二、provide / inject:跨层级通信
Vue 2.2+ 开始支持
provide 和 inject,用于祖孙组件通信。✅ 适用于:深层组件嵌套的依赖注入
⚠️ 注意:默认不是响应式的,建议结合 Vue.observable 或 Vuex 管理状态
三、事件总线:非父子组件通信
使用空的 Vue 实例作为中央事件总线,实现跨组件通信。
✅ 适用于:兄弟组件、解耦通信
四、Vuex:状态管理
Vuex 是官方提供的状态管理模式,适用于中大型项目。
✅ 适用于:跨组件共享状态
五、$refs 操作子组件实例
使用
$refs 可以访问子组件实例并调用其方法。✅ 适用于:调用子组件方法的场景
六、全局事件 / 全局属性
可以通过 Vue 原型链添加全局方法或属性(注意性能和可维护性)
✅ 适用于:工具函数封装、插件式功能注入
总结:通信方式对比表
方式 | 适用场景 | 是否响应式 | 是否推荐 |
props/$emit | 父子组件 | ✅ | ✅ ✅ ✅ |
provide/inject | 多层嵌套组件 | ⚠️(需搭配响应式手段) | ✅ |
事件总线 | 任意组件 | ✅ | ✅(适用于小型项目) |
Vuex | 中大型项目 | ✅ | ✅ ✅ ✅ |
$refs | 获取方法 | ✅ | ✅ |
Vue.prototype | 工具封装 | ✅ | ⚠️ 不推荐滥用 |
- 作者:wdkang
- 链接:https://blog.wdkang.com/article/vue-communication
- 声明:本文采用 CC BY-NC-SA 4.0 许可协议,转载请注明出处。






.png?table=block&id=1ee896c5-9558-8082-9649-e66950102aad&t=1ee896c5-9558-8082-9649-e66950102aad)


