Vue组件间通信方式超详细(父传子、父传后代、子传父、后代传父、兄弟组件传值)
创始人
2024-05-27 11:26:51

一、父传子、父传后代

方式一:子通过props来接收

image.png
父组件:父组件引入子组件时,通过子组件传值。

备注:这种方式父传值很方便,但是传递给后代组件不推荐(父->子->孙),且这种方式父组件不能直接修改父组件传过来的数据。



子组件:子组件通过props即props:{ parentValue:{ type:String, default:"" } }来接收父组件传过来的值



方式二:通过this.$parent.xxx子组件直接使用父组件的值

备注:这种方式,子组件可以直接修改父组件的数据。

image.png
父组件:正常引入子组件


子组件:通过this.$parent.parentValue获取父组件的数据。


方式三:依赖注入provide/inject

备注:这种方式父组件可以直接向某个后代组件传值,不用再一级一级的传递。

缺点:很难去找这个值是从哪个组件传递过来的。

image.png
父组件:通过provide定义需要传递给后代的数据。


子组件:


孙子组件:通过inject注入爷爷辈组件传递过来的值。



效果图:

image.png

二、子传父、后代传父

方式一:this.$emit(“function”,param)

子组件通过$emit传递一个函数和参数,父组件通过传递过来的函数接收参数即传过来的值。

父子组件一般会触发交互行为(子组件传递过来的值放在生命周期函数里是传不过来的),所以可以通过父子的交互行为获取到子组件传递过来的数据。

image.png
父组件:通过子组件自定义的函数进行绑定接收传递过来的数据。


子组件:通过this.emit("function",param)子组件通过emit("function",param) 子组件通过emit("function",param)子组件通过emit传递一个函数和参数,父组件通过传递过来的函数接收参数即传过来的值。


效果图:

image.png

方式二:this.$child.xxx直接获取子组件数据,且可直接修改子组件的数据。

父组件:this.$children[0].childValue获取子组件数据,只有一个子组件故下标为0.


子组件:


方式三:通过ref/refs获取子组件dom从而直接获取子组件数据。可直接修改子组件数据。

父组件:


子组件与上述相同。

三、兄弟组件传值

方式一:通过中转eventBus.js工具类

新建一个中转eventBus.js工具类,传值的兄弟组件自定义一个函数通过

eventBus.$emit('function',参数);

给接收值的兄弟组件传一个约定好的function名称及参数(即传递的值);接收值的兄弟组件通过

eventBus.$on('function',val=>{console.log("传递过来的值",val)
})

来接收传递过来的值。

image.png
eventBus.js:

import Vue from 'vue'
export default new Vue();

传值的兄弟组件:


接收值的兄弟组件:


效果图:
在这里插入图片描述

相关内容

热门资讯

苹果应用商店有App放高利贷?...   炒股就看金麒麟分析师研报,权威,专业,及时,全面,助您挖掘潜力主题机会! (来源:网易科技)1...
外交部发言人就柬泰签署停火联合... 转自:成都日报锦观外交部发言人就柬泰签署停火联合声明答记者问 新华社北京12月27日电 外交部...
全国人民代表大会常务委员会关于... (来源:衢州日报)转自:衢州日报  第十四届全国人民代表大会常务委员会第十九次会议决定:中华人民共和...
获新晋国家5A级旅游景区授牌 转自:成都日报锦观成都天台山景区获新晋国家5A级旅游景区授牌 本报讯 (成都日报锦观新闻记者 ...
大咖面对面 战旗村里话振兴 转自:成都日报锦观全国著名“三农”学者温铁军解码成都实践智慧大咖面对面 战旗村里话振兴 12月...