位置: 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图表绘制步骤)

  • b站直播入口在哪(b站直播入口在哪小说)

    b站直播入口在哪(b站直播入口在哪小说)

  • 华为mate30pro可以插耳机吗(华为mate30pro可以插内存卡吗)

    华为mate30pro可以插耳机吗(华为mate30pro可以插内存卡吗)

  • 应用宝评论系统升级怎么回事(应用宝评论系统升级不能评论)

    应用宝评论系统升级怎么回事(应用宝评论系统升级不能评论)

  • 拼多多怎么申请10倍赔偿(拼多多怎么申请换货呢)

    拼多多怎么申请10倍赔偿(拼多多怎么申请换货呢)

  • 为什么移动数据开不了(为什么移动数据开着却不能用)

    为什么移动数据开不了(为什么移动数据开着却不能用)

  • 为什么QQ辅助资料验证失败(为什么QQ辅助资料明明填对了,还一直显示验证失败?)

    为什么QQ辅助资料验证失败(为什么QQ辅助资料明明填对了,还一直显示验证失败?)

  • b站直接替换稿件弹幕还在吗(b站直接替换稿件播放量还在吗)

    b站直接替换稿件弹幕还在吗(b站直接替换稿件播放量还在吗)

  • 微信为什么没有新表情(微信为什么没有朋友圈)

    微信为什么没有新表情(微信为什么没有朋友圈)

  • 字处理软件是系统软件吗(字处理软件概述)

    字处理软件是系统软件吗(字处理软件概述)

  • 华为畅享10是屏幕指纹嘛(华为畅享10屏幕材质)

    华为畅享10是屏幕指纹嘛(华为畅享10屏幕材质)

  • 电脑的宽带连接用户名是什么(电脑的宽带连接怎么设置)

    电脑的宽带连接用户名是什么(电脑的宽带连接怎么设置)

  • 电视可以下载万能钥匙吗(电视下载万能钥匙可以接吗)

    电视可以下载万能钥匙吗(电视下载万能钥匙可以接吗)

  • ps如何修改手机照片的文字(如何在手机上用ps软件改数据)

    ps如何修改手机照片的文字(如何在手机上用ps软件改数据)

  • 魅族16T怎么更新软件(魅族16x怎么更新flyme8)

    魅族16T怎么更新软件(魅族16x怎么更新flyme8)

  • mate30pro怎么设置熄屏快呼(mate30pro怎么设置来电闪光灯)

    mate30pro怎么设置熄屏快呼(mate30pro怎么设置来电闪光灯)

  • 芒果tv怎么改绑定手机号(芒果tv怎么改绑定手机)

    芒果tv怎么改绑定手机号(芒果tv怎么改绑定手机)

  • uc浏览器的隐藏空间在哪里(uc浏览器隐藏功能)

    uc浏览器的隐藏空间在哪里(uc浏览器隐藏功能)

  • 黄瓜视频又改地址了吗(黄瓜视频是不是换新地址了?)

    黄瓜视频又改地址了吗(黄瓜视频是不是换新地址了?)

  • 手机地址栏怎么进入(手机地址栏怎么进入手机地址栏进入方法网叶)

    手机地址栏怎么进入(手机地址栏怎么进入手机地址栏进入方法网叶)

  • 硬盘怎么连接电脑(硬盘怎么连接电脑使用)

    硬盘怎么连接电脑(硬盘怎么连接电脑使用)

  • 竞价推广怎么做(抖音竞价推广怎么做)

    竞价推广怎么做(抖音竞价推广怎么做)

  • healthcheck健康检测工具在win11系统中无法安装怎么办(健康检查查询系统)

    healthcheck健康检测工具在win11系统中无法安装怎么办(健康检查查询系统)

  • bengine.exe是什么进程 bengine进程安全吗(wrme.exe是什么)

    bengine.exe是什么进程 bengine进程安全吗(wrme.exe是什么)

  • Python中文分词及词频统计(python中文分词代码)

    Python中文分词及词频统计(python中文分词代码)

  • 计提存款利息
  • 投资者减除费用和工资薪金减除费用
  • 营业成本包含折旧费吗
  • 差额增税可以抵扣吗
  • 个人所得税当月计提下月申报
  • 可辨认净资产和所有者权益的区别
  • 增值税发票跨年抵扣新政策
  • 贸易公司委托加工买进和卖出东西不一样
  • 在建工程转固定资产账务处理
  • 收到外商投入资金
  • 公司房产税如何征收税率
  • 物业公司可以开什么项目的发票
  • 营改增个体工商户优惠政策
  • 股东分红个人所得税怎么申报
  • 个体工商户税种认定的税目可以改吗
  • 小规模纳税人已经开了3%的票还可以享受1%的优惠吗
  • 企业税前扣除凭证包括以下哪些方面
  • 印花税扣款
  • 非正常损失进项税额转出计算
  • 去年开的增值税普通发票今年可以作废吗
  • 工会经费怎么申报,多久报一次
  • 为什么我的windows10
  • win10更新kb5006670
  • 抵押房产可以买卖吗
  • 用自产的产品用于生产线
  • 出租房子收入计入什么科目
  • php部署在什么服务器
  • 差额征税通俗理解
  • 查看电脑系统版本
  • 修建污水厂需要办理哪些审批
  • linux怎样使用
  • 纳税人提供应税服务
  • Yii2实现ajax上传图片插件用法
  • 车辆购置税发票在哪里打印
  • echarts图大小设置
  • rmt命令 远端磁带传输协议模块
  • photoshop虚化局部
  • python中的函数调用
  • 织梦标签工具
  • 固定资产净残值账务处理
  • 跨月红字发票开错了可以撤销吗
  • 车船税和保险在一张发票怎么做账
  • 公司为非本单位缴纳社保
  • 转让无形资产或其他资产
  • 购入需安装设备的会计分录
  • 事业单位劳务派遣是啥意思
  • 合同取得成本和销售费用
  • 先收款后给发票合法吗
  • 报销餐费增值税进项税计入什么科目
  • 办公费项目内容
  • 如何提取坏账准备
  • 长期应付款涉及哪些业务,应如何进行核算
  • 有奖销售增值税处理
  • 管理会计的职能作用是
  • mysql压缩包安装教程8.0.20
  • win8开机logo
  • windows 11安全模式
  • windows10总是出现打印机错误
  • 如何关闭win10自动升级win11
  • win8开始菜单变为win10
  • linux系统怎么复制文件到u盘
  • win7运行老游戏方法
  • Extjs中DisplayField的日期或者数字格式化扩展
  • 简单谈谈你的入党动机
  • opengl怎么学
  • 虚拟主机 推荐
  • 处理判断字符串是否相等
  • jquery.validate 自定义验证方法及validate相关参数
  • js中文本框设置的代码
  • jqgrid 动态表头
  • 浏览器判断手机品牌
  • js获取当前月份的天数
  • 广东民生求助热线电话是多少
  • 所得税汇总纳税分配表
  • 石家庄有线电视客服电话9688
  • 房产税怎么计提和缴纳分录
  • 税务公文字体
  • 税务有问题会罚多少钱?
  • 支付宝交税查询
  • 云南2021高考改革
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

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

    友情链接: 武汉网站建设