位置: IT常识 - 正文

VUE 父子组件、兄弟组件 之间通信 最强详解(vue父子组件加载顺序)

编辑:rootadmin
VUE 父子组件、兄弟组件 之间通信 最强详解

目录

1. 父组件 调用 子组件 内参数/方法

1.1 通过 ref 调用/获取 子组件内参数/方法

2. 子组件 调用 父组件 内参数/方法

2.1 通过 emit 调用 父组件方法

2.2 通过 props 调用 父组件方法/参数

2.3 通过 this.$parent 调用 父组件方法/参数

3. 兄弟组件 通信

3.1 通过 bus 进行 兄弟组件 通信

3.2 通过 父组件 让兄弟组件 进行通信


推荐整理分享VUE 父子组件、兄弟组件 之间通信 最强详解(vue父子组件加载顺序),希望有所帮助,仅作参考,欢迎阅读内容。

文章相关热门搜索词:vue父子组件间的参数传递是如何做到的,vue父子组件传值,vue父子组件的生命周期,vue父子组件传值,vue父子组件传值,vue父子组件通信,vue父子组件生命周期执行顺序,vue父子组件通信,内容如对您有帮助,希望把文章链接给更多的朋友!

简单 总结:

1.1 通过 ref 调用/获取 子组件内参数/方法

实现:就是在 你想要访问的组件上 通过 ref 注册引用信息,然后依靠 this.$refs 调用 组件内的方法以及参数。

2.1 通过 emit 调用 父组件方法

实现:将 要在子组件中 想调用的父组件方法,通过【@】配置至组件上,然后通过this.$emit()来调用。

2.2 通过 props 调用 父组件方法/参数

实现:将 要在子组件中 想调用的父组件方法/父组件参数,通过 【:】配置至组件上,接着在子组件的 props 内进行接收,然后直接通过 this.来调用就行。

2.3 通过 this.$parent 调用 父组件方法/参数

实现:呃,啥也不用弄,只要保持当前组件上面有个父组件就行,直接通过 this.$parent 调用就行。

3.1 通过 bus 进行 兄弟组件 通信

实现:通过 new Vue() 生成一个 bus 总线,然后在想要接收通信的组件内设置 bus.$on, 在想要发起通信的组件内使用 bus.$emit。

3.2 通过 父组件 让兄弟组件 进行通信

子组件1 传值 给父组件,父组件 传值 给子组件2

想了解 ref、$refs、$parent  请看我的另一篇文章:http://t.csdn.cn/66Fkt

1. 父组件 调用 子组件 内参数/方法1.1 通过 ref 调用/获取 子组件内参数/方法

步骤:

a 父组件 => 在 子组件元素上 设置 ref='名称'

b 父组件 => 然后通过 使用 this.$refs.名称.参数/方法 调用方法/参数

想了解 ref 请看我的另一篇文章:http://t.csdn.cn/66Fkt

先看截图,再看代码

<template> <div class="box"> <div>我是父组件</div> <div>{{ value }}</div> <button @click="handleFetchBaby1Param" class="button">获取 baby1 内参数</button> <button @click="handleFetchBaby1Function" class="button">调用 baby1 内方法</button> <!-- 通过 ref 在 baby1 组件身上 注册引用信息 --> <baby1 ref="baby1" class="border"></baby1> </div></template><script>import baby1 from '@/components/html/baby1.vue'export default { name: 'home', components:{ baby1 }, data(){ return{ value: "" } }, methods:{ // 获取 baby1 内参数 handleFetchBaby1Param(){ this.value = this.$refs.baby1.value; }, // 调用 baby1 内方法 handleFetchBaby1Function(){ this.$refs.baby1.handleBaby1Self() } }}</script><template> <div class="box"> <div>我是子组件1</div> <input v-model="value" style="width: 100%"> </div></template><script>export default { name: 'baby1', data(){ return{ value: null } }, methods: { // Baby1 组件 handleBaby1Self(){ this.value = this.value + 1; console.log('Baby1 组件 内方法被调用 =>', this.value) } }}</script>2. 子组件 调用 父组件 内参数/方法2.1 通过 emit 调用 父组件方法

步骤:

a 父组件 => 首先 在父组件内准备好 被 子组件调用的方法

VUE 父子组件、兄弟组件 之间通信 最强详解(vue父子组件加载顺序)

b 父组件 => 将准备好的方法 需要通过@ 挂载至 组件元素上 (举例:<baby1 @childConsole='parentConsole'></baby1> )

c 子组件 => 在子组件内 通过 this.$emit('方法名', 参数1,参数2...) 调用

先看截图,再看代码

<template> <div class="box"> <div>我是父组件</div> <div>{{ name }}</div> <!-- 通过 @ 将事件挂载 在组件上 --> <baby1 @childConsole='parentConsole'></baby1> </div></template><script>import baby1 from '@/components/html/baby1.vue'export default { name: 'home', components:{ baby1 }, data(){ return{ name: '', } }, methods:{ parentConsole(name){ this.name = name; console.log('父组件 的 方法被调用', this.name) } }}</script><template> <div class="box"> <div>我是子组件</div> <input v-model="value" style="width: 100%"> <button @click="handleFetchHomeFunction">调用 父组件 方法</button> </div></template><script>export default { name: 'baby1', data(){ return{ value: '' } }, methods: { // 调用 父组件方法 handleFetchHomeFunction(){ this.$emit('childConsole', this.value) } }}</script>2.2 通过 props 调用 父组件方法/参数

步骤:

a 父组件 => 首先 在父组件内准备好 被 子组件调用的方法/参数

b 父组件 => 将准备好的方法 需要通过: 将 方法/参数 挂载至 组件元素上 (举例:<baby1 :childConsole='parentConsole' :mail='mail'></baby1> )

c 子组件 => 在 子组件 props 中 配置 接收来自父组件的方法/参数

d 子组件 => 在子组件内 通过 this.方法名(参数1,参数2...) 调用 / this.参数名 获取

先看截图,再看代码

<template> <div class="box"> <div>我是父组件</div> <div>{{ name }}</div> <!-- 通过 : 将 方法/参数 挂载 在组件上 --> <baby1 :childConsole='parentConsole' :mail='mail'></baby1> </div></template><script>import baby1 from '@/components/html/baby1.vue'export default { name: 'home', components:{ baby1 }, data(){ return{ name: '', mail: 'xxxx@qq.com' } }, methods:{ parentConsole(name){ this.name = name; console.log('父组件 的 方法被调用', this.name) } }}</script><template> <div class="box"> <div>我是子组件</div> {{ mail }} <input v-model="value" style="width: 100%"> <button @click="handleFetchHomeFunction">调用 父组件 方法</button> </div></template><script>export default { name: 'baby1', // 通过 配置 props 接收来自的方法/参数 props:{ // 接受 方法 childConsole:{ type: Function, require: true, default: null }, // 接受 参数 mail:{ type: String, require: true, default: null }, }, data(){ return{ value: '' } }, methods: { // 调用 父组件方法 handleFetchHomeFunction(){ this.childConsole(this.value) console.log('mail =>', this.mail) } }}</script>2.3 通过 this.$parent 调用 父组件方法/参数

步骤:

a 父组件 => 首先 在父组件内准备好 被 子组件调用的方法/参数

b 子组件 => 在子组件内 通过 this.$parent.父组件方法名(参数1,参数2...) 调用方法 / this.$parent.父组件内参数名 获取参数

想了解 $parent 请看我的另一篇文章:http://t.csdn.cn/66Fkt

先看截图,再看代码

<template> <div class="box"> <div>我是父组件</div> <div>{{ name }}</div> <baby1></baby1> </div></template><script>import baby1 from '@/components/html/baby1.vue'export default { name: 'home', components:{ baby1 }, data(){ return{ name: '', age: 18, } }, methods:{ parentConsole(name){ this.name = name; console.log('父组件 的 方法被调用', this.name) } }}</script><template> <div class="box"> <div>我是子组件</div> {{ age }} <input v-model="value" style="width: 100%"> <button @click="handleFetchHomeFunction">调用 父组件 方法</button> </div></template><script>export default { name: 'baby1', data(){ return{ value: '', age: null, } }, methods: { handleFetchHomeFunction(){ // 调用 父组件方法 this.$parent.parentConsole(this.value); // 获取 父组件参数 this.age = this.$parent.age; } }}</script>3. 兄弟组件 通信3.1 通过 bus 进行 兄弟组件 通信

步骤:

a 在 main.js 文件内 将 new Vue() 挂载至 vue 原型上。这样方便使用,不用到处导入

b 在 接受 通信的组件内 使用 this.$bus.$on() 进行初始化

c 在 发起通信 组件内 使用 this.$bus.$emit('方法名', 参数1, 参数2...)

先看截图,再看代码

// mian.jsimport Vue from 'vue'import App from './App'import router from './router'Vue.prototype.$bus = new Vue(); // 设置 挂载至 vue 的原型上new Vue({ el: '#app', router, components: { App }, template: '<App/>'})<template> <div class="box"> <div>我是父组件</div> <div style="display: flex"> <!-- 子组件 1 (-_- 我和 子组件2 是同级关系 所以是兄弟组件 -_- )--> <baby1 class="border"></baby1> <!-- 子组件 2 (-_- 我和 子组件1 是同级关系 所以是兄弟组件 -_- )--> <baby2 class="border"></baby2> </div> </div></template><script>import baby1 from '@/components/html/baby1.vue'import baby2 from '@/components/html/baby2.vue'export default { name: 'home', components:{ baby1, baby2 }}</script><template> <div class="box"> <div>我是子组件1</div> <input v-model="value" style="width: 100%"> <button @click="handleFetchHomeFunction">将值 更新至 子组件2</button> </div></template><script>export default { name: 'baby1', data(){ return{ value: '' } }, methods: { // 调用 兄弟组件 方法 handleFetchHomeFunction(){ this.$bus.$emit('valueUpdate', this.value) } }}</script><template> <div class="box"> <div>我是子组件2</div> <input v-model="value" style="width: 100%"> </div></template><script>export default { name: 'baby1', data(){ return{ value: '' } }, mounted(){ // 接收 事件 this.$bus.$on('valueUpdate', (value)=>{ this.value = value; }) },}</script>3.2 通过 父组件 让兄弟组件 进行通信

因为相比较 bus 不是很方便,兄弟通信尽量用 bus 就好,所以这里就不放代码了,直接说一下思路

子组件1 传值 给父组件,父组件 传值 给子组件2

博主清楚 文章排版的好坏,会导致 阅读者 能否更好的理解内容!

所以 如果你有 好的排版想法,可以私信给我呦!

本文链接地址:https://www.jiuchutong.com/zhishi/288967.html 转载请保留说明!

上一篇:js中几种循环的退出方式(js循环有哪些)

下一篇:三、Echart图表 之 X轴(xAxis)与 Y轴(yAxis)配置项大全(echarts图表绘制步骤)

  • 微信头像换了对方怎么还显示原来的(微信头像换了对方多久显示)

    微信头像换了对方怎么还显示原来的(微信头像换了对方多久显示)

  • 花呗怎么手动申请提额的呢(花呗申请步骤)

    花呗怎么手动申请提额的呢(花呗申请步骤)

  • 惠普无线鼠标怎么连接(惠普无线鼠标怎么拆开)

    惠普无线鼠标怎么连接(惠普无线鼠标怎么拆开)

  • excel如何快速插入多行(excel如何快速插图)

    excel如何快速插入多行(excel如何快速插图)

  • 电脑外置摄像头模糊怎么办(台式电脑外置摄像头)

    电脑外置摄像头模糊怎么办(台式电脑外置摄像头)

  • 电脑用户文件夹怎么改名(电脑用户文件夹可以放在d盘吗)

    电脑用户文件夹怎么改名(电脑用户文件夹可以放在d盘吗)

  • 腾讯会议会自动打开摄像头吗(腾讯会议会自动结束吗)

    腾讯会议会自动打开摄像头吗(腾讯会议会自动结束吗)

  • wps纸张大小没选项了怎么办(wps设置纸张大小后布局出现问题)

    wps纸张大小没选项了怎么办(wps设置纸张大小后布局出现问题)

  • 管理员怎么设置专属头衔(抖音管理员怎么设置)

    管理员怎么设置专属头衔(抖音管理员怎么设置)

  • 全民k歌的k币有什么用(全民k歌k币有什么作用)

    全民k歌的k币有什么用(全民k歌k币有什么作用)

  • 小米的智能精灵叫什么(小米智能精灵怎么称呼它)

    小米的智能精灵叫什么(小米智能精灵怎么称呼它)

  • wf出现感叹号不可上网是什么情况(wf上有个感叹号)

    wf出现感叹号不可上网是什么情况(wf上有个感叹号)

  • 为什么X27充电不显示闪充(x27为什么充不进去电)

    为什么X27充电不显示闪充(x27为什么充不进去电)

  • 手机qq怎么给别人留言(手机qq怎么给别人发qq邮箱)

    手机qq怎么给别人留言(手机qq怎么给别人发qq邮箱)

  • ps如何处理照片反光(ps如何处理照片背景)

    ps如何处理照片反光(ps如何处理照片背景)

  • 手机qq空间怎么发定时说说(手机qq空间怎么进入)

    手机qq空间怎么发定时说说(手机qq空间怎么进入)

  • 手机自动同步有什么用(手机 自动同步)

    手机自动同步有什么用(手机 自动同步)

  • iOS13如何设置来电闪光灯(ios13如何设置来电小头像)

    iOS13如何设置来电闪光灯(ios13如何设置来电小头像)

  • vivo手机怎么调空调(vivo手机怎么调字体大小)

    vivo手机怎么调空调(vivo手机怎么调字体大小)

  • 不穿内衣有什么好处(18岁女生应该穿那种类型的内衣?)

    不穿内衣有什么好处(18岁女生应该穿那种类型的内衣?)

  • qq音乐铭牌怎么穿戴(qq音乐铭牌怎么使用)

    qq音乐铭牌怎么穿戴(qq音乐铭牌怎么使用)

  • vivo字体变成了空心字(vivo字体突然变大怎么办)

    vivo字体变成了空心字(vivo字体突然变大怎么办)

  • 苹果剪切板怎么打开(苹果剪切板怎么弄)

    苹果剪切板怎么打开(苹果剪切板怎么弄)

  • 小米手环睡眠质量原理(小米手环睡眠质量)

    小米手环睡眠质量原理(小米手环睡眠质量)

  • 小米手环4标准版有小爱吗(小米手环4标准和NFC区别)

    小米手环4标准版有小爱吗(小米手环4标准和NFC区别)

  • 手机优酷有小窗模式嘛(手机优酷有小窗口功能吗)

    手机优酷有小窗模式嘛(手机优酷有小窗口功能吗)

  • 解决npm warn config global `--global`, `--local` are deprecated. use `--location=global` instead.(解决掉发的有效方法)

    解决npm warn config global `--global`, `--local` are deprecated. use `--location=global` instead.(解决掉发的有效方法)

  • vue中的v-for循环(vuev-for循环k值的意义)

    vue中的v-for循环(vuev-for循环k值的意义)

  • 会费收入增值税申报
  • 计提维保费
  • 股权置换税收
  • 增值税小规模纳税人购进货物支付的增值税直接计入
  • 村委会什么会计准则
  • 个人转让房产两年内全额计税是什么意思
  • 公司收到分红怎么交税
  • 个人独资企业可以核定征收吗
  • 房地产一般纳税人扣除土地价款
  • 月底计提分录
  • 合伙企业借款利息收入个税
  • 免税的开成有税率的怎么办
  • 公司可以用现金付房租吗
  • 股权转让与增资扩股的税务
  • 企业国有资产无偿划转办法
  • 高速公路通行费发票可以抵扣增值税吗
  • 超市预付卡销售开票管理规定最新
  • 加油费充值卡发票可以报销吗
  • 资产的名义已使用年限与实际已使用年限的区别与联系
  • 如何确认增值税纳税义务发生时间
  • 空调减值损失属于什么科目?
  • 工程款增值税专用发票如何开具
  • 事业单位去年的年假今年可以休吗
  • 坏账处理的所得税税率
  • 回迁安置房税收优惠
  • 预收账款的科目属性
  • 企业取得出售可供出售金融资产该如何写分录呢?
  • 交通补贴和通讯补贴标准
  • 员工宿舍可以扣除住房租金支出吗
  • 1697510839
  • 医药批发行业增值税税负率
  • win10怎么看已安装的驱动
  • linux设置用户密码
  • php递归函数的例子
  • wordpress 中文版和国际版区别
  • 联想thinkpad l380yoga
  • 框架导入
  • 残保金计入税金还是管理费用
  • 元宇宙区块链数字货币
  • 小规模纳税人出租不动产免征增值税
  • js-cookie vue
  • mkisofs命令
  • php中验证码如何实现登录验证
  • html5+css3web前端设计基础教程
  • 当月勾选认证可以在下月抵扣吗
  • 开票资料的开户银行必须是基本户吗
  • 银行贷款第三方是什么意思
  • 什么情况下需要做肠胃镜
  • 做私活要收个人所得税吗
  • 商业折扣影响主营业务成本吗
  • 应交税费账户的用途和结构是怎样的
  • 个税更改公司怎么操作
  • 中小企业财务核算的重要性
  • 支出应计入管理费用,而且要根据其发生额
  • 购买原材料的支出
  • 房地产企业成本包括哪些
  • 预收账款退款的会计处理
  • 工程增值税抵扣比例
  • 代垫水电费的账务处理
  • 预包装食品是否可以称重销售吗
  • 补交增值税如何入账
  • 维护费要交税吗
  • 企业建账的法律规定
  • centos 离线安装git
  • win10专业装机版
  • 为了保证系统安全,必须为用户和角色设置密码
  • 给网页添加javascript
  • cocos creator3
  • js时间范围
  • java跟python哪个好
  • unity3d怎么做游戏
  • jquery密码验证
  • nodejs调用npm命令
  • Unity导出的webgl能做AR吗
  • 拨号器怎么用
  • javascript 日期
  • 如何搭建应用服务器
  • 企业欠税交不起怎么办
  • 水费不用交吗
  • 湖北国税发票真伪查询系统
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

    网站地图: 企业信息 工商信息 财税知识 网络常识 编程技术

    友情链接: 武汉网站建设