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

  • 荣耀50能不能开空调(荣耀50能不能开视频美颜)

    荣耀50能不能开空调(荣耀50能不能开视频美颜)

  • 小米主题在哪个文件夹(小米主题在哪个软件下载)

    小米主题在哪个文件夹(小米主题在哪个软件下载)

  • 快手幸运草怎么送(快手幸运星怎么操作)

    快手幸运草怎么送(快手幸运星怎么操作)

  • 闲鱼买家要加微信是什么原因(闲鱼买家要加微信拒绝怎么回绝)

    闲鱼买家要加微信是什么原因(闲鱼买家要加微信拒绝怎么回绝)

  • 微店退款对店铺有影响吗(微店退款会发短信吗)

    微店退款对店铺有影响吗(微店退款会发短信吗)

  • 手机酷狗音乐怎么复制链接(手机酷狗音乐怎么转换mp3格式)

    手机酷狗音乐怎么复制链接(手机酷狗音乐怎么转换mp3格式)

  • 启用gpu调试层有必要开吗(启用 gpu 调试层)

    启用gpu调试层有必要开吗(启用 gpu 调试层)

  • 有流量但是打不开数据(有流量但是打不开软件)

    有流量但是打不开数据(有流量但是打不开软件)

  • 路由器闪红灯上不了网(路由器闪红灯上不了网怎么回事)

    路由器闪红灯上不了网(路由器闪红灯上不了网怎么回事)

  • 拼单2人成功会发货吗(和别人拼单成功是不是每人都有)

    拼单2人成功会发货吗(和别人拼单成功是不是每人都有)

  • 进微信群群主能看到吗(进微信群群主能看见吗)

    进微信群群主能看到吗(进微信群群主能看见吗)

  • 小米8能用pd快充吗(小米8能不能用快充)

    小米8能用pd快充吗(小米8能不能用快充)

  • id和ip有什么区别(id和pid的区别)

    id和ip有什么区别(id和pid的区别)

  • 苹果xr振动效果怎么调(xr振动怎么调节?)

    苹果xr振动效果怎么调(xr振动怎么调节?)

  • 华为手机日历在哪里设置(华为手机日历在桌面显示)

    华为手机日历在哪里设置(华为手机日历在桌面显示)

  • 华为p30pro支持防水吗(华为p30pro防触摸感应在哪里)

    华为p30pro支持防水吗(华为p30pro防触摸感应在哪里)

  • windows10如何截屏(windows10如何截屏录屏)

    windows10如何截屏(windows10如何截屏录屏)

  • 加黑名单和删除的区别(拉到黑名单里的人怎么恢复)

    加黑名单和删除的区别(拉到黑名单里的人怎么恢复)

  • 苹果系统怎么修改User用户密码?Mac修改User用户密码教程(苹果系统怎么修复)

    苹果系统怎么修改User用户密码?Mac修改User用户密码教程(苹果系统怎么修复)

  • 如何在Win11中添加无线打印机?Win11中添加无线打印机操作方法(windows 11怎么用)

    如何在Win11中添加无线打印机?Win11中添加无线打印机操作方法(windows 11怎么用)

  • 新装win10我的电脑在哪(win10新装系统我的电脑在哪)

    新装win10我的电脑在哪(win10新装系统我的电脑在哪)

  • 布里瓦德附近的皮斯加国家森林,北卡罗来纳州 (© Adam Jones/Danita Delimont)(布里奇和瓦内莎)

    布里瓦德附近的皮斯加国家森林,北卡罗来纳州 (© Adam Jones/Danita Delimont)(布里奇和瓦内莎)

  • 个体户超过了核定征收额怎么交税
  • 合同甲方乙方收钱付钱涉及什么税金
  • 什么是简易征税项目
  • 什么情况下可以领取失业保险金
  • 税负转嫁的概念是什么
  • 劳务公司开出的工程服务费专用发票怎么计费
  • 税金及附加怎么登账
  • 城建税 小规模
  • 原始投资额包括资本化利息吗
  • 商誉减值可以抵税吗
  • 发出材料计划成本例题
  • 收到合同款
  • 国内公司向境外公司借款
  • 发生应收账款如何入账可避税
  • 餐饮行业原材料
  • 资产减值准备的账务处理
  • 国家动漫企业认定优惠政策
  • 营增改的四大“增效剂”
  • 固定资产折旧计算方法
  • 纳税人指什么意思
  • 以前年度损益调整会计分录
  • 未竣工验收已交付使用的工程还需安全监管吗
  • 防暑降温用品进什么科目
  • 北大新闻传播学院副院长
  • 在window10中可以使用什么窗口
  • windows11正式版好用吗
  • 苹果怎么设置屏保和壁纸
  • phpstudy如何查看错误日志
  • java开发主流框架
  • php数组可以使用哪些键名
  • 固定资产更新改造支出计入什么科目
  • 应收账款证券化流程
  • jar启动指定启动类
  • zendframework3中文手册
  • 高新企业技术服务成本核算
  • php数组分类
  • 限定性收入跟非限定性收入的区别
  • .gp4
  • 出口退税后发生退货怎么处理
  • 存货盘盈盘亏会涉及到其他应收款吗
  • Python如何查看中风患者两表的数据量
  • php如何连接html
  • 在建工程会计科目明细
  • 管理费用属于产品成本么
  • 网上纳税申报有时间限制吗
  • 工资结算汇总表怎么填
  • 主营业务利润率标准
  • 免抵退税会计处理
  • 货物运输发票的开票要求
  • 医院药品进销差价规定
  • 挂靠人员社保缴费分录如何做?
  • 电汇凭证是什么会计科目
  • 其他业务支出包括哪些内容科目
  • 待处理财产损益是备抵类科目吗
  • 应收账款属于流动负债项目吗
  • 商业企业库存商品
  • 数据库句柄是什么意思
  • python中的django
  • win10 win7控制面板
  • 怎么手动安装xp系统
  • linux各种重定向及其含义
  • win8系统自带应用都打不开了怎么办
  • win10系统以太网连接图标不见了怎么办
  • win10的三个安全问题
  • cocos 2d x
  • JavaScript数组添加元素
  • android中的布局分为6种,分别是
  • perl脚本调试方法
  • 微信小程序tabbar字体颜色
  • node.js文件流
  • git 删除分支和回滚的实例详解
  • 用python学算法
  • shell脚本实际运用
  • android自定义viewgroup绘制
  • jsgenerator
  • 在android
  • 企业所得税年报资产总额平均值怎么填写
  • 江苏4050社保补贴政策2024
  • 晋江劳动局地址
  • 江西税务登记证查询官网
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

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

    友情链接: 武汉网站建设