封装vuetify3中v-time-picker组件,并解决使用时分秒类型只能在修改秒之后v-model才会同步更新的问题

目前时间组件还属于实验室组件,要使用需要单独引入,具体使用方式查看官网

创建公共时间选择器组件

common-time-pickers.vue 子组件页面

<template><div><v-dialog v-model="props.timeItem.isShow" activator="parent" width="auto"><v-time-pickerv-if="props.timeItem.isShow"v-model="timeVal"use-secondsformat="24hr"color="primary"class="pa-0"@update:hour="updateHour"@update:minute="updateMinute"@update:second="updateSecond"><template v-slot:title><!-- title null --></template><template v-slot:actions><div class="mt-6"><v-btn @click="emit('close')">取消</v-btn><v-btn color="primary" @click="saveTime">确认</v-btn></div></template></v-time-picker></v-dialog></div>
</template><script setup>
const props = defineProps({timeItem: {type: Object,default: () => {return {isShow: false,time: "00:00:00",index: 0, //操作索引,可不传type: "", //操作类型};},},
});const emit = defineEmits(["update:timeItem", "close"]);const timeVal = ref(props.timeItem.time);const hours = ref(0);
const minutes = ref(0);
const seconds = ref(0);watch(toRef(props, "timeItem"),(newVal) => {if (newVal.isShow) {timeVal.value = newVal.time;// const [h, m, s] = newVal.time.split(':');// hours.value = parseInt(h, 10);// minutes.value = parseInt(m, 10);// seconds.value = parseInt(s, 10);// updateTimeVal();}},{ deep: true }
);// 因为组件中使用了use-second,默认只有在“秒”发生改变时,v-model中的值才会更新,
// 所以需要额外绑定“时”、“分”、“秒” 的事件进行处理
const updateHour = (val) => {hours.value = val;updateTimeVal("hour");
};const updateMinute = (val) => {minutes.value = val;updateTimeVal("minute");
};const updateSecond = (val) => {seconds.value = val;updateTimeVal("second");
};const updateTimeVal = (updatedPart) => {let [currentHours, currentMinutes, currentSeconds] = timeVal.value.split(":");// 确保每次更新时不改变其他值,否则修改“时”或其他值时,可能会导致“分”和“秒”被联动更改if (updatedPart === "hour") {currentHours = padZero(hours.value);} else if (updatedPart === "minute") {currentMinutes = padZero(minutes.value);} else if (updatedPart === "second") {currentSeconds = padZero(seconds.value);}timeVal.value = `${currentHours}:${currentMinutes}:${currentSeconds}`;// console.log("更新了++++", timeVal.value);
};const padZero = (num) => {return num < 10 ? "0" + num : num.toString();
};const saveTime = () => {emit("close");emit("update:timeItem", {time: timeVal.value,index: props.timeItem.index,type: props.timeItem.type,});
};
</script><style lang="scss" scoped></style>

页面效果

我这里修改的是表格中的开始时间和结束时间,属于数组中值需要遍历,如果你只需要设置单个值,可不传索引

在这里插入图片描述

父组件中使用

vue中

<template><div><!--输入框调用子组件,可以有多个输入框,这里只演示一个,item.endTime是输入框同步的时间,也会更新到子组件中,index是操作的对象索引,如果不传递需要对selecteTime方法稍作修改,endTime是修改的对象键值,方便拿到返回值时更新父组件的值--><v-text-fieldv-model="item.endTime"readonlyhide-detailsdensity="compact"@click="selecteTime(item.endTime, index, 'endTime')"></v-text-field><!--引入组件--><common-time-pickers:timeItem="timeItem"@close="timeItem.isShow = false"@update:timeItem="updateTimeItem"/></div>
</template>

script中

import commonTimePickers from "@/components/common-time-pickers.vue"<script setup>
const timeItem = ref({});// 输入框触发,选择时间
const selecteTime = (time, index, type) => {timeItem.value = {isShow: true,//打开弹框time,//时间,需要同步更新到子组件中index,//修改的对象索引(非必须)type,//修改的对象字段类型};
};//确认更新时间
const updateTimeItem = (payload) => {timeItem.value.isShow = false;const { time, index, type } = payload;// console.log("确定时间>>>", payload);// 使用展开运算符和计算属性名更新对象// 更新desserts数组中索引为index的type字段值(已经可以收到时间子组件传递过来的最新的值了,根据自己的需求更改父组件中值)desserts.value[index] = { ...desserts.value[index], [type]: time };
};</script>

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/860132.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

网页里面的3D交互展示是怎么做的呢?

网页里实现3D交互展示已经有非常成熟的软件和平台&#xff0c;使用起来非常便捷高效&#xff0c;也不需要懂编程和开发。具体方法如下&#xff1a; 1、设计3D模型&#xff1a;使用3D建模软件&#xff08;如Blender, 3ds Max, Maya等&#xff09;制作好3D模型&#xff0c;确保模…

Struts2 S2-061 远程命令执行漏洞(CVE-2020-17530)

目录 Struts2介绍 漏洞介绍 环境搭建 漏洞探测 执行命令 反弹shell 这一篇还是参考大佬的好文章进行Struts2 S2-061远程命令执行漏洞的学习和练习 Struts2介绍 百度百科 Struts2框架是一个用于开发Java EE网络应用程序的开放源代码网页应用程序架构。它利用并延伸了Ja…

Python3 学习_基础篇:(八)控制语句_ for while 循环

文章目录 学习目标&#xff1a;1.知道什么是循环&#xff1b;2.会用for 和 while 循环编写程序。 学习内容&#xff1a;一、 什么是循环二、while 循环三、 for 循环四、break , continue 关键字和 else 子句 拓展练习 学习目标&#xff1a; 1.知道什么是循环&#xff1b; 2.…

无缝迁移至阿里云RocketMQ:从私有化部署到云端的实用指南

目录 简介迁移步骤 选择合适的客户端版本准备必要的资源重要接口介绍更新POM依赖配置文件调整使用RocketMQTemplate进行消息处理 总结 简介 本指南旨在帮助将已有的开源RocketMQ部署顺利迁移到阿里云RocketMQ。通过逐步的指导和详细示例&#xff0c;你可以轻松实现以下场景&…

高效完成元数据导入(通过表格)

高效完成元数据导入 ​ 提升工作效率系列。别人还在吭哧吭哧干体力活的时候&#xff0c;你要将重复的工作尽量标准化&#xff0c;流程化&#xff0c;自动化&#xff0c;代码化。腾出更多的时间摸鱼&#xff08;提升自己打怪升级&#xff09; ​ 数据治理中&#xff0c;我们经…

昇思25天学习打卡营第1天|MindSpore快速入门

今天是参加华为MindSpore昇思25天学习打卡营的第一天&#xff0c;通过博客记录一下自己的学习路程 初识MindSpore 昇思MindSpore是一个全场景深度学习框架&#xff0c;旨在实现易开发、高效执行、全场景统一部署三大目标。 昇思MindSpore总体架构图 通过一套统一的MindSpore开…

Selenium、chromedriver安装配置

Selenium、chromedriver安装配置 一、Selenium简介二、Selenium安装三、ChromeDriver的安装3.1 查看浏览器版本3.2 下载ChromeDriver3.3 环境变量配置一、Selenium简介 Selenium是一个自动化测试工具,利用它我们可以驱动浏览器执行特定的点击、下拉等操作。对于一些JS动态渲染…

河南建筑工程乙级设计资质新办对配备的技术人员有什么要求

河南建筑工程乙级设计资质新办对配备的技术人员有什么要求 河南建筑工程乙级设计资质新办时&#xff0c;对配备的技术人员有以下基本要求&#xff1a; 注册人员&#xff1a;需要配备一定数量的注册工程师&#xff0c;具体包括&#xff1a; 一级注册建筑师2名一级注册结构工程师…

OpenCV视觉--视频人脸微笑检测(超详细,附带检测资源)

目录 概述 具体实现 1.加载分类器 2.打开摄像头并识别人脸 3.处理人脸并检测是否微笑 效果 总结 概述 OpenCV&#xff08;Open Source Computer Vision Library&#xff09;是一个开源的计算机视觉和机器学习库&#xff0c;广泛应用于图像处理和视频分析等领…

【STM32】GPIO复用和映射

1.什么叫管脚复用 STM32F4有很多的内置外设&#xff0c;这些外设的外部引脚都是与GPIO复用的。也就是说&#xff0c;一个GPIO如果可以复用为内置外设的功能引脚&#xff0c;那么当这个GPIO作为内置外设使用的时候&#xff0c;就叫做复用。 STM32F4系列微控制器IO引脚通过一个…

KUBIKOS - Animated Cube Mini BIRDS(卡通立方体鸟类)

软件包中添加了对通用渲染管线 (URP) 的支持! KUBIKOS - 动画立方体迷你鸟是17种不同的可爱低多边形移动友好鸟的集合!每只都有自己的动画集。 完美收藏你的游戏! +17种不同的动物! + 低多边形(400~900个三角形) + 操纵和动画! + 4096x4096 纹理图集 + Mecanim 准备就绪…

Windows kubectl终端日志聚合(wsl+ubuntu+cmder+kubetail)

Windows kubectl终端日志聚合 一、kubectl终端日志聚合二、windows安装ubuntu子系统1. 启用wsl支持2. 安装所选的 Linux 分发版 三、ubuntu安装kubetail四、配置cmder五、使用 一、kubectl终端日志聚合 k8s在实际部署时&#xff0c;一般都会采用多pod方式&#xff0c;这种情况下…

大数据平台之Ambari

Apache Ambari 是一个用于配置、管理和监控 Hadoop 集群的开源工具。Ambari 提供了一个直观的用户界面和一组全面的 API&#xff0c;使得管理大数据集群变得更加容易和高效。以下是对 Ambari 的详细介绍&#xff1a; 1. Ambari 概述 Ambari 的主要目的是简化 Hadoop 集群的安…

开源笔记omnivore框架简单介绍

从 package.json 文件的内容可以看出&#xff0c;这个项目使用了多个工具和框架。以下是对其主要特性和工具的解释&#xff1a; 项目特性和工具 Monorepo 管理 使用了 Lerna 来管理多个包&#xff0c;这些包位于 packages/* 目录下。Lerna 是一个流行的工具&#xff0c;用于管…

通过高德api查询所有店铺地址信息

通过高德api查询所有店铺地址电话信息 需求&#xff1a;通过高德api查询所有店铺地址信息需求分析具体实现1、申请高德appkey2、下载types city 字典值3、具体代码调用 需求&#xff1a;通过高德api查询所有店铺地址信息 需求分析 查询现有高德api发现现有接口关键字搜索API服…

Django Aggregation 使用指南

Django Aggregation 使用指南 在构建Django应用时&#xff0c;我们经常需要对数据库中的数据进行汇总或聚合操作。例如&#xff0c;计算某个字段的平均值、最大值或最小值。这篇文章将详细介绍如何在Django中使用聚合查询&#xff0c;并结合实例进行说明。 聚合查询简介 Dja…

数据库精选题(五)(事务、并行控制与恢复系统)

&#x1f308; 个人主页&#xff1a;十二月的猫-CSDN博客 &#x1f525; 系列专栏&#xff1a; &#x1f3c0;数据库 &#x1f4aa;&#x1f3fb; 十二月的寒冬阻挡不了春天的脚步&#xff0c;十二点的黑夜遮蔽不住黎明的曙光 目录 前言 概论 事务 并发控制 恢复系统 三…

游戏AI的创造思路-技术基础-机器学习(2)

本篇存在大量的公式&#xff0c;数学不好的孩子们要开始恶补数学了&#xff0c;尤其是统计学和回归方程类的内容。 小伙伴们量力而行~~~~~ 游戏呢&#xff0c;其实最早就是数学家、元祖程序员编写的数学游戏&#xff0c;一脉相承传承至今&#xff0c;囊括了更多的设计师、美术…

QT拖放事件之五:自定义拖放操作-拖动中的修饰符操作

1、效果 2、代码 #include "SelfButton.h" #include <QApplication>SelfButton::SelfButton(QString str ,QWidget* parent):Q

按揭和抵押的区别和联系

按揭和抵押在法律上是有所区别的&#xff1a; 抵押&#xff1a;指的是债务人&#xff08;或第三人&#xff09;将自己的动产或不动产不移交给债权人&#xff0c;作为债权的担保。债务人不履行债务时&#xff0c;债权人有权优先受偿。抵押物不转移占有&#xff0c;仍由债务人或…