01 前端必学:Vue2 组件间8种通信方式详解
组件通信是Vue开发的核心知识,本文用生活化比喻+真实案例,带你快速掌握8种通信方式的使用场景和实现方法。
一、父子组件通信(快递收发模式)
1. Props(父传子快递)
适用场景:父组件向子组件传递数据
export default { data() { return { parentMsg: '来自爸爸的爱' } } } export default { props: ['message'], mounted() { console.log(this.message) // 输出:来自爸爸的爱 } }
2. $emit(子传父电话)
适用场景:子组件向父组件传递数据
呼叫父组件 export default { methods: { sendMsg() { this.$emit('child-event', '爸爸我饿了') } } } export default { methods: { handleEvent(msg) { console.log(msg) // 输出:爸爸我饿了 } } }
二、兄弟组件通信(广播站模式)
3. EventBus(中央广播站)
适用场景:任意组件间通信
// 创建广播站 const EventBus = new Vue() // 组件A发广播 EventBus.$emit('update', '全体注意!') // 组件B收广播 EventBus.$on('update', msg => { console.log(msg) // 输出:全体注意! })
三、跨级组件通信(家族遗传模式)
4. a t t r s / attrs/ attrs/listeners(基因继承)
适用场景:跨级传递属性和事件
export default { mounted() { console.log(this.$attrs.name) // 输出:爷爷 this.$emit('shout') // 触发祖先事件 } }
5. Provide/Inject(家族信托)
适用场景:深层嵌套组件传值
// 祖先组件设立信托 export default { provide() { return { familyName: '张氏家族' } } } // 后代组件领取信托 export default { inject: ['familyName'], mounted() { console.log(this.familyName) // 输出:张氏家族 } }
四、快捷访问(家庭直呼)
6. p a r e n t / parent/ parent/children(家庭群聊)
// 子组件中 this.$parent.parentMethod() // 父组件中 this.$children[0].childMethod()
7. $refs(点名呼叫)
export default { mounted() { this.$refs.child.doSomething() } }
五、全局状态管理(中央仓库)
8. Vuex(中央仓库)
文件结构:
store/ ├── index.js # 主仓库 ├── actions.js # 异步操作 ├── mutations.js # 同步修改 └── getters.js # 计算属性
典型使用:
// 组件中获取数据 computed: { count() { return this.$store.state.count } } // 修改数据 this.$store.commit('increment', 10) // 异步操作 this.$store.dispatch('asyncIncrement')
六、通信方式选型指南
场景 | 推荐方式 |
---|---|
父子组件简单传值 | Props/$emit |
兄弟组件通信 | EventBus |
跨多级组件传值 | Provide/Inject |
复杂组件通信 | Vuex |
快速访问组件实例 | r e f s / refs/ refs/parent/$children |
小贴士:简单场景用Props,复杂场景用Vuex,紧急需求用EventBus,跨级传递用Provide
理解这些通信方式后,你可以像搭积木一样灵活组合Vue组件。记住:没有最好的方式,只有最合适的方式!
(图片来源网络,侵删)
(图片来源网络,侵删)
免责声明:我们致力于保护作者版权,注重分享,被刊用文章因无法核实真实出处,未能及时与作者取得联系,或有版权异议的,请联系管理员,我们会立即处理! 部分文章是来自自研大数据AI进行生成,内容摘自(百度百科,百度知道,头条百科,中国民法典,刑法,牛津词典,新华词典,汉语词典,国家院校,科普平台)等数据,内容仅供学习参考,不准确地方联系删除处理! 图片声明:本站部分配图来自人工智能系统AI生成,觅知网授权图片,PxHere摄影无版权图库和百度,360,搜狗等多加搜索引擎自动关键词搜索配图,如有侵权的图片,请第一时间联系我们。