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

vue2组件通信中的一些拓展(props,emit,ref父子双向传参)

说明

我上一篇文章中基本对vue所有的数据通信方法进行了一个整理归纳。

其实我并没有像传统的那样去罗列,比如父传子有props,ref,子传父为emit,兄弟用$bus等等。

因为在我的实际练习和业务开发中,props,emit,ref等可以实现父子数据互传,这里就涉及一个比较重要的编程思维,函数式编程。

当我们使用props传递一个函数呢,那么子组件调用这个函数时,将参数传入这个函数的调用,那么在父组件中定义的函数不就可以直接获取到了子组件中数据了吗。

其余的两个也是同理,记住,传参有两种,一种是常规变量,一种是函数,传递什么决定了你的功能。

看代码:

props实现父子双向传参:

父组件

<template><div><p>父组件数字值1:{{ numValue1 }} <el-button @click="addNum">增加</el-button></p><p>获取子组件的值:{{ numValue2 }}</el-button></p><hr /><PropsChild :numValue1="numValue1" :numValue2="getChildValue"></PropsChild></div>
</template>
<script>
import PropsChild from './child.vue'
export default {name: 'propsTest',components: {PropsChild},data() {return {numValue1: 0,numValue2: '父组件默认的值'}},methods: {addNum() {this.numValue1++},getChildValue(childValue) {console.log(childValue, '???子组件的数值')this.numValue2 = childValue},getChildValueFun() {}}
}
</script>
<style lang="less"></style>

子组件

<template><div><p>子组件数值:{{ numValue1 }}</p><el-input v-model="value" @input="numValue2" class="inputBox"></el-input></div>
</template>
<script>
export default {name: 'propsChild',props: {numValue1: {type: Number,require: true,default: 0},numValue2:{type:Function,default:()=>{}}},data(){return{value:'子组件本身的值'}}}
</script>
<style lang="less">
.inputBox{width:300px;margin-top:16px;
}
</style>

$emit实现父子双向传参

父组件

<template><div>父组件<el-input v-model="value" @input="changeInput"></el-input><hr><EmitChild @getChildValue="getChildValue"></EmitChild></div>
</template>
<script>
import EmitChild from './child.vue'export default{name:'emitTest',data(){return{value:'父组件默认的值',childFun:()=>{}}},components:{EmitChild},mounted(){},methods:{getChildValue(childValue){if(typeof childValue === 'function'){this.childFun = childValue}else{this.value = childValue}},changeInput(value){this.childFun(value)}}}
</script>
<style lang="less"></style>

子组件

<template><div>子组件<el-input v-model="value" @input="changeValue"></el-input></div></template><script>export default{name:'emitChild',data(){return{value:'子组件默认的值'}},mounted(){this.$emit('getChildValue',this.emitFun)},methods:{changeValue(){this.$emit('getChildValue',this.value)},emitFun(value){this.value = value}}}</script><style lang="less"></style>

$ref实现父子双向传参

父组件

<template><div><p>父组件的值:{{ value }} <el-button @click="addNum">增加</el-button> </p><hr><Child ref="child"></Child></div>
</template>
<script>
import Child from './child.vue'export default{name:'refTest',components:{Child},data(){return{value:0}},mounted(){this.$refs.child.getFun(this.funHandler)},methods:{addNum(){this.value++this.$refs.child.getValue(this.value)},funHandler(value){this.value = value}}}
</script>

子组件

<template><div>子组件的值{{ value }}<el-button @click="add">增加</el-button></div>
</template>
<script>export default{name:'refTest',data(){return{value:0,funHandler:()=>{}}},methods:{getValue(val){this.value = val},getFun(funHandler){this.funHandler = funHandler},add(){this.value ++this.funHandler(this.value)}}}
</script>

结束语

虽然在开发中,大部分人都会按照既定思维,props和ref父传子,emit子传父,但是我们是开发者,需要有更多的思维在里面,你可以不用,但是你需要去思考,去尝试。

vue和react等框架本身就大量使用了函数式编程的思想,作为使用者的我们,也要同样的将这种思想运用进去,才会有更多优质的代码,才回提升自己。

相关文章:

vue2组件通信中的一些拓展(props,emit,ref父子双向传参)

说明 我上一篇文章中基本对vue所有的数据通信方法进行了一个整理归纳。 其实我并没有像传统的那样去罗列,比如父传子有props,ref,子传父为emit,兄弟用$bus等等。 因为在我的实际练习和业务开发中,props,emit,ref等可以实现父子数据互传,这里就涉及一个比较重要的编程思维,函…...

Flink1.17 DataStream API

目录 一.执行环境&#xff08;Execution Environment&#xff09; 1.1 创建执行环境 1.2 执行模式 1.3 触发程序执行 二.源算子&#xff08;Source&#xff09; 2.1 从集合中读取数据 2.2 从文件读取数据 2.3 从 RabbitMQ 中读取数据 2.4 从数据生成器读取数据 2.5 …...

数据结构中树、森林 与 二叉树的转换

1 树转换为 二叉树 将树转换成二叉树的步骤是&#xff1a; 加线。在所有的兄弟结点之间加一条线。去线。对于树中的每个结点&#xff0c;只保留它与第一个孩子结点的连线&#xff0c;删除该结点其他孩子结点之间的连线。调整。以树的根结点为轴心&#xff0c;将整个树顺时针旋…...

力扣labuladong——一刷day43

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 前言一、力扣257. 二叉树的所有路径二、力扣129. 求根节点到叶节点数字之和三、力扣199. 二叉树的右视图四、力扣662. 二叉树最大宽度 前言 一般来说&#xff0c;如…...

MapApp 地图应用

1. 简述 1.1 重点 1&#xff09;更好地理解 MVVM 架构 2&#xff09;更轻松地使用 SwiftUI 框架、对齐、动画和转换 1.2 资源下载地址: Swiftful-Thinking:https://www.swiftful-thinking.com/downloads 1.3 项目结构图: 1.4 图片、颜色资源文件图: 1.5 启动图片配置图: 2. Mo…...

Java之反射获取和赋值字段

在Java中&#xff0c;反射能够使得代码更加通用&#xff0c;往往用于工具类中。 但常常我们在获取或者赋值反射的属性时&#xff0c;会出现没有赋值成功的结果&#xff0c;往往是由于这个属性在父级中而导致的&#xff0c;这个时候我们就不能用getDeclaredField方法单独获取字段…...

ckplayer自己定义风格播放器的开发记录

CKplayer是一款基于Flash和HTML5技术的开源视频播放器&#xff0c;支持多种格式的音视频播放&#xff0c;并且具有优秀的兼容性和扩展性。 它不仅可以在网页上播放本地或者网络上的视频&#xff0c;还可以通过代码嵌入到网页中&#xff0c;实现更加个性化的播放效果。CKplayer…...

全网最全Django面试题整理(一)

Django 中的 MTV 是什么意思&#xff1f; 在Django中&#xff0c;MTV指的是“Model-Template-View”&#xff0c;而不是常见的MVC&#xff08;Model-View-Controller&#xff09;架构。Django的设计理念是基于MTV的 Model&#xff08;模型&#xff09; 模型代表数据存取层&am…...

vue统一登录

说明&#xff1a; 统一登录其实就是前端去判断Url地址的token 之后如果有token未过期就直接跳转到首页。 说到浏览器输入url地址&#xff0c;那从浏览器输入地址一共发生了几件事大致如下&#xff1a; DNS解析域名&#xff0c;获取IP地址 --》 建立TCP连接&#xff08;三次握…...

MVSNet论文笔记

MVSNet论文笔记 摘要1 引言2 相关基础2.1 多视图立体视觉重建&#xff08;MVS Reconstruction&#xff09;2.2 基于学习的立体视觉&#xff08;Learned Stereo&#xff09;2.3 基于学习的多视图的立体视觉&#xff08;Learned MVS&#xff09; 3 MVSNet3.1 网络架构3.2 提取图片…...

大型 APP 的性能优化思路

做客户端开发都基本都做过性能优化&#xff0c;比如提升自己所负责的业务的速度或流畅性&#xff0c;优化内存占用等等。但是大部分开发者所做的性能优化可能都是针对中小型 APP 的&#xff0c;大型 APP 的性能优化经验并不会太多&#xff0c;毕竟大型 APP 就只有那么几个&…...

K8S配置资源管理

这里写目录标题 K8S配置资源管理一.Secret1.介绍2.Secret 有四种类型3.创建 Secret4.使用方式 二.ConfigMap1.介绍2.创建 ConfigMap3.Pod 中使用 ConfigMap4.用 ConfigMap 设置命令行参数5.通过数据卷插件使用ConfigMap6.ConfigMap 的热更新7.ConfigMap 更新后滚动更新 Pod K8S…...

Redis 的集群模式实现高可用

来源&#xff1a;Redis高可用&#xff1a;武林秘籍存在集群里&#xff0c;那稳了~ (qq.com) 1. 引言 前面我们已经聊过 Redis 的主从同步&#xff08;复制&#xff09;和哨兵机制&#xff0c;这期我们来聊 Redis 的集群模式。 但是在超大规模的互联网应用中&#xff0c;业务规…...

21、嵌套路由实战操作

1、创建内嵌子路由&#xff0c;你需要添加一个vue文件&#xff0c;同时添加一个与该文件同名的目录用来存放子视图组件。 2、在父组件&#xff08;.vue&#xff09;内增加用于显示子视图内容 新建文件 pages\index_id.vue 生成的对应路由 {path: "/",component: _…...

WPF 控件的缩放和移动

WPF 控件的缩放和移动 1.页面代码 <ContentControl ClipToBounds"True" Cursor"SizeAll"><Viewboxx:Name"viewbox"MouseDown"viewbox_MouseDown"MouseMove"viewbox_MouseMove"MouseWheel"Viewbox_MouseWhee…...

Python and和or的优先级实例比较

Python and和or的优先级 and和or都是Python的逻辑运算符&#xff0c;都为保留字。通常情况下&#xff0c;在没有括号影响&#xff0c;and和or的优先级中and在代码的逻辑运算过程中会相对优先一些&#xff0c;及在同一行的Python代码中&#xff0c;and会优先与or执行。下面将通…...

数据结构与算法编程题2

逆置线性表&#xff0c;使空间复杂度为 O(1) #include <iostream> using namespace std;typedef int ElemType; #define Maxsize 100 #define OK 1 #define ERROR 0 typedef struct SqList {ElemType data[Maxsize];int length; }SqList;void Init_SqList(SqList& …...

Java开发者的Python快速进修指南:控制之if-else和循环技巧

简单介绍 在我们今天的学习中&#xff0c;让我们简要了解一下Python的控制流程。考虑到我们作为有着丰富Java开发经验的程序员&#xff0c;我们将跳过一些基础概念&#xff0c;如变量和数据类型。如果遇到不熟悉的内容&#xff0c;可以随时查阅文档。但在编写程序或逻辑时&…...

二进制部署k8s集群-过程中的问题总结(接上篇的部署)

1、kube-apiserver部署过程中的问题 kube-apiserver.conf配置文件更改 2、calico的下载地址 curl https://docs.projectcalico.org/v3.20/manifests/calico.yaml -O 这里如果kubernetes的节点服务器为多网卡配置会产生报错 修改calino.yaml配置文件 解决方法&#xff1a; 调…...

IOS 关于CoreText的笔记

放大 一.CoreText计算attributeString显示所占区域 百度搜索有三种方法&#xff1a; 1.方法 - (CGRect)boundingRectWithSize:(CGSize)size options:(NSStringDrawingOptions)options context:(nullable NSStringDrawingContext *)context 2.使用CTFrameRef 的 CTFrameGetLin…...

脑机接口工具箱实战(一):基于BCILAB的P300信号处理与分类全流程解析

1. 认识P300与BCILAB工具箱 P300是脑电信号中一种特殊的诱发电位&#xff0c;通常在受试者识别到罕见或重要刺激后约300毫秒出现。这种信号在脑机接口研究中具有重要价值&#xff0c;比如拼写系统、注意力监测等应用场景。对于刚接触脑机接口的研究者来说&#xff0c;最大的挑…...

嵌入式开发调试宏与性能优化实战

1. 嵌入式开发调试宏的妙用在嵌入式开发中&#xff0c;调试是最耗时耗力的环节之一。每次修改代码后都需要重新烧录、运行、观察结果&#xff0c;这个过程往往要重复数十次。而合理使用编译器提供的调试宏&#xff0c;可以大幅提升调试效率。1.1 基础调试宏解析GCC编译器提供了…...

厂房钢结构工程:从设计、制造到安装验收的关键要点全解析

一、什么是厂房钢结构工程&#xff0c;为什么越来越常见&#xff1f;厂房钢结构工程&#xff0c;简单说&#xff0c;就是以钢柱、钢梁、檩条、支撑体系、屋面系统和围护系统为主体&#xff0c;完成工业厂房、仓储车间、物流中心、生产车间及配套功能区建设的一类工程。相比传统…...

运动生物力学数据分析全流程dz: 运动学分析:Qualysis_Vicon动作捕捉数据处理(关节角度、角速度、重心轨迹等) 动力学分析:AMTI_Kistler测力台数据处理、逆动力学计算(关节力、力

运动生物力学数据分析全流程dz&#xff1a; 运动学分析&#xff1a;Qualysis/Vicon动作捕捉数据处理&#xff08;关节角度、角速度、重心轨迹等&#xff09; 动力学分析&#xff1a;AMTI/Kistler测力台数据处理、逆动力学计算&#xff08;关节力、力矩、功率&#xff09; 肌电信…...

PyTorch 3.0 DDP + torch.compile混合训练面试通关手册:涵盖Graph Break诊断、Shard策略冲突、以及3种反模式现场复现

第一章&#xff1a;PyTorch 3.0 静态图分布式训练面试概览PyTorch 3.0 并非官方发布版本&#xff08;截至2024年&#xff0c;PyTorch最新稳定版为2.3&#xff09;&#xff0c;但“PyTorch 3.0”在面试语境中常被用作一种假设性技术命题&#xff0c;用于考察候选人对静态图编译、…...

实战复盘:从帕鲁杯应急响应赛题看企业级安全事件调查全流程

企业级安全事件调查实战指南&#xff1a;从CTF赛题到真实攻防溯源 在网络安全领域&#xff0c;应急响应能力直接决定了企业遭受攻击后的损失程度。去年某大型电商平台因未能及时识别攻击链&#xff0c;导致用户数据持续泄露长达三周&#xff0c;最终造成数亿元的直接损失。这类…...

GB28181视频监控平台EasyCVR助力景区数字化转型,打造一体化视频监控解决方案

随着文旅行业数字化转型进程持续加速&#xff0c;旅游景区的安全管理、服务优化与运营效率提升已成为行业发展的核心诉求。景区场景普遍具有面积广阔、人员流动性强等特点&#xff0c;传统监控方案存在设备兼容性差、可视化管控能力不足等诸多短板&#xff0c;难以满足当前景区…...

FileConverter:重构文件格式转换流程,实现设计师与教育工作者的效率突破

FileConverter&#xff1a;重构文件格式转换流程&#xff0c;实现设计师与教育工作者的效率突破 【免费下载链接】FileConverter File Converter is a very simple tool which allows you to convert and compress files using the context menu in windows explorer. 项目地…...

远程协助工具

# 详见&#xff1a;https://mp.weixin.qq.com/s/sY-KrOqpY3C1JUeiELEJNw # 来源&#xff1a;https://chat.qwen.ai/# ToDesk https://www.todesk.com/# 向日葵 https://sunlogin.oray.com/# TeamViewer https://www.teamviewer.com/# AnyDesk https://anydesk.com/ https://any…...

2026年Java面试最常被问的1000道题目及参考答案

Java学到什么程度可以面试工作&#xff1f; 要达到能够面试Java开发工作的水平&#xff0c;需要掌握以下几个方面的知识和技能&#xff1a; 1. 基础扎实&#xff1a;熟悉Java语法、面向对象编程概念、异常处理、I/O流等基础知识。这是所有Java开发者必备的基础&#xff0c;也…...