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

vue3(1)虚拟数字键盘的封装,(2)以及子组件改变父组件变量的值进而使子组件实时响应值的变化,(3)子组件调用父组件中的方法(带参)

父组件

<template><div><!-- 数字键盘 --><NumericKeyboardv-model:myDialogFormVisible="myDialogFormVisible" :myValueRange="myValueRange"@submit="numericKeyboardSubmitData"/></div>
</template><script setup>
import NumericKeyboard from './NumericKeyboard'
//数字键盘参数和方法
const myDialogFormVisible = ref(false);
const myValueRange= ref({min: -100,max: 100,
})
const myForm= ref({myPointKey: "",
})
function numericKeyboardSubmitData(v){const key = myForm.value.myPointKey;const value = v.myValue;const orderParam = {pointKey: key, pointValue: value}//调用接口,提交数据
}
</script>

子组件

<template><div><el-dialog:model-value="myDialogFormVisible":width="width"append-to-body:close-on-click-modal="false"class="numeric-key-board-dialog"draggableid="dialog":show-close="false"><template #header="{ titleId, titleClass }"><div class="numeric-key-board-header"><span :id="titleId" :class="titleClass"> 请输入:</span></div></template><el-form :model="myForm" :rules="myFormRules" ref="myFormRef" label-position="top" @submit.prevent="mySubmit('myFormRef')"><el-form-item label="" label-width="0px" prop="myValue"><el-input v-model="myForm.myValue" :placeholder="'输入范围为' + myValueRange.min + '~' + myValueRange.max" clearable /></el-form-item><div class="keyboard"><div class="keyboard-row"><el-button type="" size="small" @click="handleAddNumber('1')">1</el-button><el-button type="" size="small" @click="handleAddNumber('2')">2</el-button><el-button type="" size="small" @click="handleAddNumber('3')">3</el-button></div><div class="keyboard-row"><el-button type="" size="small" @click="handleAddNumber('4')">4</el-button><el-button type="" size="small" @click="handleAddNumber('5')">5</el-button><el-button type="" size="small" @click="handleAddNumber('6')">6</el-button></div><div class="keyboard-row"><el-button type="" size="small" @click="handleAddNumber('7')">7</el-button><el-button type="" size="small" @click="handleAddNumber('8')">8</el-button><el-button type="" size="small" @click="handleAddNumber('9')">9</el-button></div><div class="keyboard-row"><el-button type="" size="small" @click="handleAddNumber('.')">.</el-button><el-button type="" size="small" @click="handleAddNumber('0')">0</el-button><el-button type="" size="small" @click="handleAddNumber('-')">-</el-button></div><div class="keyboard-row"><el-button type="" size="small" @click="handelDeleteNumber('删除一个')">x</el-button><el-button type="danger" size="small" @click="myCancel">取消</el-button><el-button type="primary" size="small" @click="mySubmit('myFormRef')">确认</el-button></div></div></el-form></el-dialog></div>
</template><script setup>
const { proxy } = getCurrentInstance();const props = defineProps({myDialogFormVisible: {type: Boolean,default: false,},myValueRange: {type: Object,default: {min: -100,max: 100,},},width:{type:String,default:'15%',}
});const myForm= ref({myValue: "",
})const myFormRules=ref({myValue: [{ required: true, message: "设定值不能为空", trigger: ['blur', 'change'] },{ validator: validateYkValueRange, trigger: ['blur', 'change'] },],
})
function validateYkValueRange(rule, value, callback) {const reg = /^-?(0(\.\d{1,2})?|[1-9]\d*(\.\d{1,2})?)$/; //允许负数和正数并且最多保留两位小数if (!reg.test(value)) {callback(new Error("请输入正确的数字,可以为正数负数,浮点数,最多2位小数,如-0.12,12,12.34"));} else if(value.length>5){callback(new Error("输入值不能超过5位"));} else if (value < props.myValueRange.min || value > props.myValueRange.max) {callback(new Error("数据范围必须在" +props.myValueRange.min +"到" +props.myValueRange.max +"之间"));} else {callback();}
}
//表单提交
function mySubmit(r) {proxy.$refs[r].validate((valid) => {if (valid) {emit('submit', { myValue: myForm.value.myValue })}});
}
// 表单重置
function reset() {myForm.value = {myValue: "",};proxy.resetForm("myFormRef");
};//myDialogFormVisible子组件向父组件传值,以关闭弹窗
const emit = defineEmits(['update:myDialogFormVisible','submit']);
function myCancel() {emit('update:myDialogFormVisible',false);reset();
}function handleAddNumber(num) {myForm.value.myValue += num
}
function handelDeleteNumber() {if (myForm.value.myValue.length > 0) {myForm.value.myValue = myForm.value.myValue.slice(0,-1)}
}
//检测窗口关闭时,调用
watch(()=>props.myDialogFormVisible,val=>{reset();
})</script><style lang="scss" scoped>
/* 虚拟键盘样式 */
.keyboard {padding: 0.1px 0 0 0;.keyboard-row {width: 100%;height: 30px;margin: 10px 0;display: flex;justify-content: space-between;.el-button {width: 56px;height: 28px;box-shadow: 0 2px 12px 0 rgba(0, 0, 0, 0.1)}.call {width: 100%;}}
}
.numeric-key-board-dialog{.el-dialog__header {.el-dialog__title{color: #FFFFFF !important;font-size: 15px;font-weight: 700;}}}.numeric-key-board-header {position: absolute;
}
</style>

参数

myDialogFormVisible

<NumericKeyboardv-model:myDialogFormVisible="myDialogFormVisible":myValueRange="myValueRange"@submit="numericKeyboardSubmitData"/>const emit = defineEmits(['update:myDialogFormVisible','submit']);
emit('update:myDialogFormVisible',false);

方法

submit()

<NumericKeyboardv-model:myDialogFormVisible="myDialogFormVisible":myValueRange="myValueRange"@submit="numericKeyboardSubmitData"/>function numericKeyboardSubmitData(v){const key = myForm.value.myPointKey;const value = v.myValue;const orderParam = {pointKey: key, pointValue: value}//调用接口,提交数据}emit('submit', { myValue: myForm.value.myValue })

相关文章:

vue3(1)虚拟数字键盘的封装,(2)以及子组件改变父组件变量的值进而使子组件实时响应值的变化,(3)子组件调用父组件中的方法(带参)

父组件 <template><div><!-- 数字键盘 --><NumericKeyboardv-model:myDialogFormVisible"myDialogFormVisible" :myValueRange"myValueRange"submit"numericKeyboardSubmitData"/></div> </template><s…...

反序列化靶机serial

1.创建虚拟机 2.渗透测试过程 探测主机存活&#xff08;目标主机IP地址&#xff09; 使用nmap探测主机存活或者使用Kali里的netdicover进行探测 -PS/-PA/-PU/-PY:这些参数即可以探测主机存活&#xff0c;也可以同时进行端口扫描。&#xff08;例如&#xff1a;-PS&#xff0…...

扎克伯格说Meta训练Llama 4所需的计算能力是Llama 3的10倍

Meta 公司开发了最大的基础开源大型语言模型之一 Llama&#xff0c;该公司认为未来将需要更强的计算能力来训练模型。马克-扎克伯格&#xff08;Mark Zuckerberg&#xff09;在本周二的 Meta 第二季度财报电话会议上表示&#xff0c;为了训练 Llama 4&#xff0c;公司需要比训练…...

CTFHUB-文件上传-双写绕过

开启题目 1.php内容&#xff1a; <?php eval($_POST[cmd]);?> 上传一句话木马 1.php&#xff0c;抓包&#xff0c;双写 php 然后放包&#xff0c;上传成功 蚁剑连接 在“/var/www/html/flag_484225427.php”找到了 flag...

RabbitMQ docker部署,并启用MQTT协议

在Docker中部署RabbitMQ容器并启用MQTT插件的步骤如下&#xff1a; 一、准备工作 安装Docker&#xff1a; 确保系统上已安装Docker。Docker是一个开源的容器化平台&#xff0c;允许以容器的方式运行应用程序。可以在Docker官方网站上找到适合操作系统的安装包&#xff0c;并…...

Python面试宝典第25题:括号生成

题目 数字n代表生成括号的对数&#xff0c;请设计一个函数&#xff0c;用于能够生成所有可能的并且有效的括号组合。 备注&#xff1a;1 < n < 8。 示例 1&#xff1a; 输入&#xff1a;n 3 输出&#xff1a;["((()))","(()())","(())()"…...

计算机毕业设计选题推荐-社区停车信息管理系统-Java/Python项目实战

✨作者主页&#xff1a;IT研究室✨ 个人简介&#xff1a;曾从事计算机专业培训教学&#xff0c;擅长Java、Python、微信小程序、Golang、安卓Android等项目实战。接项目定制开发、代码讲解、答辩教学、文档编写、降重等。 ☑文末获取源码☑ 精彩专栏推荐⬇⬇⬇ Java项目 Python…...

Python面试整理-自动化运维

在Python中,自动化运维是一个重要的应用领域。Python凭借其简单易用的语法和强大的库支持,成为了运维工程师的首选工具。以下是一些常见的自动化运维任务以及如何使用Python来实现这些任务: 1. 文件和目录操作 Python的os和shutil模块提供了丰富的文件和目录操作功能。 impo…...

自动化测试与手动测试的区别!

自动化测试与手动测试之间存在显著的区别&#xff0c;这些区别主要体现在以下几个方面&#xff1a; 测试目的&#xff1a; 自动化测试的目的在于“验证”系统没有bug&#xff0c;特别是在系统处于稳定状态时&#xff0c;用于执行重复性的测试任务。 手工测试的目的则在于通过…...

下属“软对抗”,工作阳奉阴违怎么办?4大权谋术,让他不敢造次

下属“软对抗”&#xff0c;工作阳奉阴违怎么办&#xff1f;4大权谋术&#xff0c;让他不敢造次 第一个&#xff1a;强势管理 在企业管理中&#xff0c;领导必须展现足够的强势。 所谓强势的管理&#xff0c;并不仅仅指态度上的强硬&#xff0c;更重要的是在行动中坚持原则和规…...

爬猫眼电ying

免责声明:本文仅做分享... 未优化,dp简单实现 from DrissionPage import ChromiumPage import time urlhttps://www.maoyan.com/films?showType2&offset60 pageChromiumPage()page.get(url) time.sleep(2) for i in range(1,20):# 爬取的页数for iu_list in page.eles(.…...

政安晨:【Keras机器学习示例演绎】(五十七)—— 基于Transformer的推荐系统

目录 介绍 数据集 设置 准备数据 将电影评分数据转换为序列 定义元数据 创建用于训练和评估的 tf.data.Dataset 创建模型输入 输入特征编码 创建 BST 模型 开展培训和评估实验 政安晨的个人主页&#xff1a;政安晨 欢迎 &#x1f44d;点赞✍评论⭐收藏 希望政安晨的…...

15.4 zookeeper java client之Curator使用(❤❤❤❤❤)

Curator使用 1. 为什么使用Curator对比Zookeeper原生2. 集成Curator2.1 依赖引入curator-frameworkcurator-recipes2.2 `yml`配置连接信息2.3 CuratorConfig配置类2.4 Curator实现Zookeeper分布式锁业务2.4.1 业务:可重入锁和不可重入锁可重入锁和不可重入锁InterProcessMutex …...

哈默纳科HarmonicDrive谐波减速机的使用寿命计算

在机械传动系统中&#xff0c;减速机的应用无处不在&#xff0c;而HarmonicDrive哈默纳科谐波减速机以其独特的优势&#xff0c;如轻量、小型、传动效率高、减速范围广、精度高等特点&#xff0c;成为了众多领域的选择。然而&#xff0c;任何机械设备都有其使用寿命&#xff0c…...

前后端完全分离实现登录和退出

前后端分离的整合 使用springsecurity前端项目redis完成认证授权的代码 1. 搭建一个前端工程 使用 vue ui搭建&#xff0c;使用webstrom操作 2. 创建一个登录页面 <template><div class"login_container"><!-- 登录盒子 --><div class"l…...

生信技能55 - WisecondorX分析结果过滤和质控

WisecondorX分析CNV,对每条染色的CNV loss和gain进行分组,对每个组求ratio平均值和zscore平均值,基于该数值对CNV进行质控和过滤,并对连续的CNV进行合并,获得可信的CNV。 WisecondorX基本使用方法以及npz文件转换和reference构建参考文章: 生信技能53 - wiseconrdoX自动…...

待办管理软件电脑版哪个好?待办事项清单app

在快节奏的现代社会中&#xff0c;有效地管理时间和任务变得越来越重要。很多人喜欢使用待办管理软件来协助整理琐碎事务、规划工作任务&#xff0c;以此提升工作效率。特别是对于上班族来说&#xff0c;一款能在电脑上便捷使用的待办软件&#xff0c;更是提升工作效率的得力助…...

【Mind+】掌控板入门教程01 “秀”出我创意

我们的好朋友麦乐佳即将举办一场派对&#xff0c;她要求每个参加派对的人都要佩戴一个可以彰显自己独特创意的装置。可以是会发光的帽子&#xff0c;可以是复古的电子表&#xff0c;还可以是其他有创意的作品。而现在&#xff0c;我们的手边刚好有一块掌控板&#xff0c;它自带…...

操作系统篇--八股文学习第十一天|进程调度算法你了解多少,进程间有哪些通信方式,解释一下进程同步和互斥,以及如何实现进程同步和互斥

进程调度算法你了解多少&#xff1f; 答&#xff1a; 先来先服务&#xff1a;按照请求的顺序进行调度。 这种调度方式简单&#xff0c;但是能导致较长作业阻塞较短作业。最短作业优先&#xff1a;非抢占式的调度算法&#xff0c;按估计运行时间最短的顺序进行调度。 但是如果…...

慢慢欣赏arm64内核启动6 primary_entry之el2_setup代码第三部分

分析代码 解析完虚拟化部分&#xff0c;我们继续分析启动过程中&#xff0c;对中断控制器的处理 #ifdef CONFIG_ARM_GIC_V3/* GICv3 system register access */mrs x0, id_aa64pfr0_el1ubfx x0, x0, #ID_AA64PFR0_GIC_SHIFT, #4cbz x0, 3fmrs_s x0, SYS_ICC_SRE_EL2orr x0, x…...

进程地址空间(比特课总结)

一、进程地址空间 1. 环境变量 1 &#xff09;⽤户级环境变量与系统级环境变量 全局属性&#xff1a;环境变量具有全局属性&#xff0c;会被⼦进程继承。例如当bash启动⼦进程时&#xff0c;环 境变量会⾃动传递给⼦进程。 本地变量限制&#xff1a;本地变量只在当前进程(ba…...

【OSG学习笔记】Day 18: 碰撞检测与物理交互

物理引擎&#xff08;Physics Engine&#xff09; 物理引擎 是一种通过计算机模拟物理规律&#xff08;如力学、碰撞、重力、流体动力学等&#xff09;的软件工具或库。 它的核心目标是在虚拟环境中逼真地模拟物体的运动和交互&#xff0c;广泛应用于 游戏开发、动画制作、虚…...

AI Agent与Agentic AI:原理、应用、挑战与未来展望

文章目录 一、引言二、AI Agent与Agentic AI的兴起2.1 技术契机与生态成熟2.2 Agent的定义与特征2.3 Agent的发展历程 三、AI Agent的核心技术栈解密3.1 感知模块代码示例&#xff1a;使用Python和OpenCV进行图像识别 3.2 认知与决策模块代码示例&#xff1a;使用OpenAI GPT-3进…...

【入坑系列】TiDB 强制索引在不同库下不生效问题

文章目录 背景SQL 优化情况线上SQL运行情况分析怀疑1:执行计划绑定问题?尝试:SHOW WARNINGS 查看警告探索 TiDB 的 USE_INDEX 写法Hint 不生效问题排查解决参考背景 项目中使用 TiDB 数据库,并对 SQL 进行优化了,添加了强制索引。 UAT 环境已经生效,但 PROD 环境强制索…...

UE5 学习系列(三)创建和移动物体

这篇博客是该系列的第三篇&#xff0c;是在之前两篇博客的基础上展开&#xff0c;主要介绍如何在操作界面中创建和拖动物体&#xff0c;这篇博客跟随的视频链接如下&#xff1a; B 站视频&#xff1a;s03-创建和移动物体 如果你不打算开之前的博客并且对UE5 比较熟的话按照以…...

STM32F4基本定时器使用和原理详解

STM32F4基本定时器使用和原理详解 前言如何确定定时器挂载在哪条时钟线上配置及使用方法参数配置PrescalerCounter ModeCounter Periodauto-reload preloadTrigger Event Selection 中断配置生成的代码及使用方法初始化代码基本定时器触发DCA或者ADC的代码讲解中断代码定时启动…...

如何在最短时间内提升打ctf(web)的水平?

刚刚刷完2遍 bugku 的 web 题&#xff0c;前来答题。 每个人对刷题理解是不同&#xff0c;有的人是看了writeup就等于刷了&#xff0c;有的人是收藏了writeup就等于刷了&#xff0c;有的人是跟着writeup做了一遍就等于刷了&#xff0c;还有的人是独立思考做了一遍就等于刷了。…...

如何理解 IP 数据报中的 TTL?

目录 前言理解 前言 面试灵魂一问&#xff1a;说说对 IP 数据报中 TTL 的理解&#xff1f;我们都知道&#xff0c;IP 数据报由首部和数据两部分组成&#xff0c;首部又分为两部分&#xff1a;固定部分和可变部分&#xff0c;共占 20 字节&#xff0c;而即将讨论的 TTL 就位于首…...

SAP学习笔记 - 开发26 - 前端Fiori开发 OData V2 和 V4 的差异 (Deepseek整理)

上一章用到了V2 的概念&#xff0c;其实 Fiori当中还有 V4&#xff0c;咱们这一章来总结一下 V2 和 V4。 SAP学习笔记 - 开发25 - 前端Fiori开发 Remote OData Service(使用远端Odata服务)&#xff0c;代理中间件&#xff08;ui5-middleware-simpleproxy&#xff09;-CSDN博客…...

九天毕昇深度学习平台 | 如何安装库?

pip install 库名 -i https://pypi.tuna.tsinghua.edu.cn/simple --user 举个例子&#xff1a; 报错 ModuleNotFoundError: No module named torch 那么我需要安装 torch pip install torch -i https://pypi.tuna.tsinghua.edu.cn/simple --user pip install 库名&#x…...