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.渗透测试过程 探测主机存活(目标主机IP地址) 使用nmap探测主机存活或者使用Kali里的netdicover进行探测 -PS/-PA/-PU/-PY:这些参数即可以探测主机存活,也可以同时进行端口扫描。(例如:-PS࿰…...

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

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

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

Python面试宝典第25题:括号生成
题目 数字n代表生成括号的对数,请设计一个函数,用于能够生成所有可能的并且有效的括号组合。 备注:1 < n < 8。 示例 1: 输入:n 3 输出:["((()))","(()())","(())()"…...

计算机毕业设计选题推荐-社区停车信息管理系统-Java/Python项目实战
✨作者主页:IT研究室✨ 个人简介:曾从事计算机专业培训教学,擅长Java、Python、微信小程序、Golang、安卓Android等项目实战。接项目定制开发、代码讲解、答辩教学、文档编写、降重等。 ☑文末获取源码☑ 精彩专栏推荐⬇⬇⬇ Java项目 Python…...
Python面试整理-自动化运维
在Python中,自动化运维是一个重要的应用领域。Python凭借其简单易用的语法和强大的库支持,成为了运维工程师的首选工具。以下是一些常见的自动化运维任务以及如何使用Python来实现这些任务: 1. 文件和目录操作 Python的os和shutil模块提供了丰富的文件和目录操作功能。 impo…...

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

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

爬猫眼电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 模型 开展培训和评估实验 政安晨的个人主页:政安晨 欢迎 👍点赞✍评论⭐收藏 希望政安晨的…...

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

前后端完全分离实现登录和退出
前后端分离的整合 使用springsecurity前端项目redis完成认证授权的代码 1. 搭建一个前端工程 使用 vue ui搭建,使用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
在快节奏的现代社会中,有效地管理时间和任务变得越来越重要。很多人喜欢使用待办管理软件来协助整理琐碎事务、规划工作任务,以此提升工作效率。特别是对于上班族来说,一款能在电脑上便捷使用的待办软件,更是提升工作效率的得力助…...

【Mind+】掌控板入门教程01 “秀”出我创意
我们的好朋友麦乐佳即将举办一场派对,她要求每个参加派对的人都要佩戴一个可以彰显自己独特创意的装置。可以是会发光的帽子,可以是复古的电子表,还可以是其他有创意的作品。而现在,我们的手边刚好有一块掌控板,它自带…...

操作系统篇--八股文学习第十一天|进程调度算法你了解多少,进程间有哪些通信方式,解释一下进程同步和互斥,以及如何实现进程同步和互斥
进程调度算法你了解多少? 答: 先来先服务:按照请求的顺序进行调度。 这种调度方式简单,但是能导致较长作业阻塞较短作业。最短作业优先:非抢占式的调度算法,按估计运行时间最短的顺序进行调度。 但是如果…...
慢慢欣赏arm64内核启动6 primary_entry之el2_setup代码第三部分
分析代码 解析完虚拟化部分,我们继续分析启动过程中,对中断控制器的处理 #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…...

iPhone密码忘记了办?iPhoneUnlocker,iPhone解锁工具Aiseesoft iPhone Unlocker 高级注册版分享
平时用 iPhone 的时候,难免会碰到解锁的麻烦事。比如密码忘了、人脸识别 / 指纹识别突然不灵,或者买了二手 iPhone 却被原来的 iCloud 账号锁住,这时候就需要靠谱的解锁工具来帮忙了。Aiseesoft iPhone Unlocker 就是专门解决这些问题的软件&…...

376. Wiggle Subsequence
376. Wiggle Subsequence 代码 class Solution { public:int wiggleMaxLength(vector<int>& nums) {int n nums.size();int res 1;int prediff 0;int curdiff 0;for(int i 0;i < n-1;i){curdiff nums[i1] - nums[i];if( (prediff > 0 && curdif…...

微信小程序 - 手机震动
一、界面 <button type"primary" bindtap"shortVibrate">短震动</button> <button type"primary" bindtap"longVibrate">长震动</button> 二、js逻辑代码 注:文档 https://developers.weixin.qq…...

React19源码系列之 事件插件系统
事件类别 事件类型 定义 文档 Event Event 接口表示在 EventTarget 上出现的事件。 Event - Web API | MDN UIEvent UIEvent 接口表示简单的用户界面事件。 UIEvent - Web API | MDN KeyboardEvent KeyboardEvent 对象描述了用户与键盘的交互。 KeyboardEvent - Web…...
【论文笔记】若干矿井粉尘检测算法概述
总的来说,传统机器学习、传统机器学习与深度学习的结合、LSTM等算法所需要的数据集来源于矿井传感器测量的粉尘浓度,通过建立回归模型来预测未来矿井的粉尘浓度。传统机器学习算法性能易受数据中极端值的影响。YOLO等计算机视觉算法所需要的数据集来源于…...
Python爬虫(二):爬虫完整流程
爬虫完整流程详解(7大核心步骤实战技巧) 一、爬虫完整工作流程 以下是爬虫开发的完整流程,我将结合具体技术点和实战经验展开说明: 1. 目标分析与前期准备 网站技术分析: 使用浏览器开发者工具(F12&…...
Linux云原生安全:零信任架构与机密计算
Linux云原生安全:零信任架构与机密计算 构建坚不可摧的云原生防御体系 引言:云原生安全的范式革命 随着云原生技术的普及,安全边界正在从传统的网络边界向工作负载内部转移。Gartner预测,到2025年,零信任架构将成为超…...

2025盘古石杯决赛【手机取证】
前言 第三届盘古石杯国际电子数据取证大赛决赛 最后一题没有解出来,实在找不到,希望有大佬教一下我。 还有就会议时间,我感觉不是图片时间,因为在电脑看到是其他时间用老会议系统开的会。 手机取证 1、分析鸿蒙手机检材&#x…...
高防服务器能够抵御哪些网络攻击呢?
高防服务器作为一种有着高度防御能力的服务器,可以帮助网站应对分布式拒绝服务攻击,有效识别和清理一些恶意的网络流量,为用户提供安全且稳定的网络环境,那么,高防服务器一般都可以抵御哪些网络攻击呢?下面…...

select、poll、epoll 与 Reactor 模式
在高并发网络编程领域,高效处理大量连接和 I/O 事件是系统性能的关键。select、poll、epoll 作为 I/O 多路复用技术的代表,以及基于它们实现的 Reactor 模式,为开发者提供了强大的工具。本文将深入探讨这些技术的底层原理、优缺点。 一、I…...