当前位置: 首页 > 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 })

http://www.lryc.cn/news/412367.html

相关文章:

  • 反序列化靶机serial
  • 扎克伯格说Meta训练Llama 4所需的计算能力是Llama 3的10倍
  • CTFHUB-文件上传-双写绕过
  • RabbitMQ docker部署,并启用MQTT协议
  • Python面试宝典第25题:括号生成
  • 计算机毕业设计选题推荐-社区停车信息管理系统-Java/Python项目实战
  • Python面试整理-自动化运维
  • 自动化测试与手动测试的区别!
  • 下属“软对抗”,工作阳奉阴违怎么办?4大权谋术,让他不敢造次
  • 爬猫眼电ying
  • 政安晨:【Keras机器学习示例演绎】(五十七)—— 基于Transformer的推荐系统
  • 15.4 zookeeper java client之Curator使用(❤❤❤❤❤)
  • 哈默纳科HarmonicDrive谐波减速机的使用寿命计算
  • 前后端完全分离实现登录和退出
  • 生信技能55 - WisecondorX分析结果过滤和质控
  • 待办管理软件电脑版哪个好?待办事项清单app
  • 【Mind+】掌控板入门教程01 “秀”出我创意
  • 操作系统篇--八股文学习第十一天|进程调度算法你了解多少,进程间有哪些通信方式,解释一下进程同步和互斥,以及如何实现进程同步和互斥
  • 慢慢欣赏arm64内核启动6 primary_entry之el2_setup代码第三部分
  • 初谈Linux多线程--线程控制
  • 文件工具类 - FileUtils
  • Kafka源码剖析-Producer基于内存缓存池分配ByteBuffer
  • 实习十九:学习笔记
  • OrionX:革新GPU资源管理,助力AI开发团队高效运作
  • RabbitMQ发送者重连、发送者确认
  • 请转告HPC计算AI计算单位,选对存储事半功倍
  • [GYCTF2020]Blacklist1
  • Blackcat V2.2付费会员制WordPress资源站主题
  • 动手学强化学习 第 18 章 离线强化学习 训练代码
  • Python笔试面试题AI答之面向对象常考知识点