当前位置: 首页 > news >正文

vue中子传父之间通信(this.$emit触发父组件方法和.sync修饰符与$emit(update:xxx))

文章目录

  • 前言
  • 一、通过this.$emit触发父组件方法实现
  • 二、.sync修饰符与$emit(update:xxx)


前言

看了几篇帖子,都没有将$emit两种用法汇聚总结在一起。需要额外的浪费时间去查看其他帖子,索性自己总结一下,方便以后查看。


一、通过this.$emit触发父组件方法实现

这种方法调用是我平常最熟悉的,通过触发事件使父组件拿到子组件传递过来的值。

//父组件,将定义的方法传递给子元素
<template><div class="father"><h1>我是父组件</h1><Son :msg="msg" @changeMsg="changeMsg"/></div>
</template><script>
import Son from '@/components/Son.vue'export default {name: 'Father',components: {Son},data(){return{msg:1}}methods:{changeMsg(text,num){console.log(text,num);this.msg=this.msg+1}},
}
</script>//子组件,通过this.$emit触发父组件方法,更改父组件数据,同时可以进行数据传值
<template><div class='son'><h1>我是子组件<button @click="changeFatherData">点我更改父组件数据</button></h1><h1>父组件数据:{{msg}}</h1></div>
</template><script>
export default {name: 'Son',props: {msg: Number,},data(){return{text:"我是子组件数据,我要发送给父组件",num:12}},methods:{changeFatherData(){this.$emit('changeMsg',this.text,this.num)}},
}
</script>

注意
this.$emit(‘changeMsg’,this.text,this.num)
<Son :msg=“msg” @changeMsg=“changeMsg”/>
$emit中的changeMsg方法名称要和@changeMsg名称一样

二、.sync修饰符与$emit(update:xxx)

.sync 修饰符可以实现子组件与父组件的双向绑定,并且可以实现子组件同步修改父组件的值。

//父组件,将定义的方法传递给子元素
<template><div class="father"><h1>我是父组件</h1><Son :msg.sync="message" /></div>
</template><script>
import Son from '@/components/Son.vue'export default {name: 'Father',components: {Son},data(){return{message:1}}
}
</script>//子组件,通过this.$emit触发父组件方法,更改父组件数据,同时可以进行数据传值
<template><div class='son'><h1>我是子组件<button @click="changeFatherData">点我更改父组件数据</button></h1><h1>父组件数据:{{msg}}</h1>  </div>
</template><script>
export default {name: 'Son',props: {msg: Number,},data(){return{num:12}},methods:{changeFatherData(){this.$emit('update:msg',this.num)}},
}
</script>

子组件触发changeFatherData方法,msg信息就会变为12
本质

<son :a.sync="num"></son> 等价于
<son:a="num" @update:a="val => num = val">
</son> 
// 相当于多了一个事件监听,事件名是 update:a,回调函数中,会把接收到的值赋值给属性绑定的数据项中。

参考文字
vue中子组件更改父组件数据
Vue .sync修饰符与$emit(update:xxx)

相关文章:

  • 低GI功能大米升温:千亿规模潜力,解决八成慢病老人主食难题
  • 【栈和队列】常见面试题
  • P1104 生日
  • Linux:多线程(二.理解pthread_t、线程互斥与同步、基于阻塞队列的生产消费模型)
  • MySQL的基本操作
  • NET 定时器 Timer和线程Thread
  • 试用AWS全新神器:Amazon Bedrock的「Open Artifacts」版Claude.ai Artifacts
  • app:layout_constrainedWidth=“true“ 在 compose 中怎么写, constraintlayout 强约束
  • 机器学习——第十章 降维与度量学习
  • Pytorch添加自定义算子之(11)-C++应用程序将onnx模型编译并转成tensorrt可执行模型
  • 【Redis】Redis 数据类型
  • 从一个服务预热不生效问题谈微服务无损上线
  • 洛伦兹微分方程与混沌理论
  • Ubuntu22.04 Docker更换阿里云镜像
  • NVIDIA Triton系列03-开发资源说明
  • JavaScript-如何实现克隆(clone)函数
  • 2017届校招提前批面试回顾
  • 2018天猫双11|这就是阿里云!不止有新技术,更有温暖的社会力量
  • fetch 从初识到应用
  • Java 11 发布计划来了,已确定 3个 新特性!!
  • JavaScript对象详解
  • Linux CTF 逆向入门
  • Linux下的乱码问题
  • PHP那些事儿
  • 百度小程序遇到的问题
  • 从 Android Sample ApiDemos 中学习 android.animation API 的用法
  • 关于 Cirru Editor 存储格式
  • 基于Vue2全家桶的移动端AppDEMO实现
  • 计算机在识别图像时“看到”了什么?
  • 快速体验 Sentinel 集群限流功能,只需简单几步
  • 前端每日实战:70# 视频演示如何用纯 CSS 创作一只徘徊的果冻怪兽
  • 区块链共识机制优缺点对比都是什么
  • 用Canvas画一棵二叉树
  • 责任链模式的两种实现
  • elasticsearch-head插件安装
  • # 计算机视觉入门
  • #php的pecl工具#
  • #Z2294. 打印树的直径
  • $LayoutParams cannot be cast to android.widget.RelativeLayout$LayoutParams
  • (C语言)字符分类函数
  • (delphi11最新学习资料) Object Pascal 学习笔记---第2章第五节(日期和时间)
  • (Pytorch框架)神经网络输出维度调试,做出我们自己的网络来!!(详细教程~)
  • (ZT)出版业改革:该死的死,该生的生
  • (附源码)spring boot基于小程序酒店疫情系统 毕业设计 091931
  • (免费领源码)python+django+mysql线上兼职平台系统83320-计算机毕业设计项目选题推荐
  • (四)【Jmeter】 JMeter的界面布局与组件概述
  • (四)图像的%2线性拉伸
  • (一)kafka实战——kafka源码编译启动
  • * CIL library *(* CIL module *) : error LNK2005: _DllMain@12 already defined in mfcs120u.lib(dllmodu
  • .describe() python_Python-Win32com-Excel
  • .net CHARTING图表控件下载地址
  • .net core Swagger 过滤部分Api
  • .net core使用EPPlus设置Excel的页眉和页脚
  • .NET MAUI学习笔记——2.构建第一个程序_初级篇
  • .net 调用php,php 调用.net com组件 --