关于el-time-picker使用错误的记录

news2024/9/22 13:29:38

之前在紧急参与一个PC管理后台的项目,项目的基础架子是花裤衩大佬的vue-element-admin()vue2版本),。其中有一个需求是列表数据中数据回显时候,有关时间部分的数据在回显/编辑的情况下,提交时获取的值有问题。虽然后面解决了,但还是觉得简单粗暴,所以记录下看大佬们有没有更好的方案。

同时也因为自己以为工作关系在学习React,所以选择了ant design vue来跟element-ui做对比,(ant design 有vue和react版本,本次对比选择react版本)

element-ui

数据回显为两个时间,开始时间和结束时间。由于是两个时间在一行,最开始使用的是时间范围选择(is-range),后来发现有问题,先改成分离版本的,交付初版代码。

el-time-picker range版本

最开始使用就是添加is-range属性的版本。参照官方示例
在这里插入图片描述

<el-time-picker
  is-range
  v-model="dataTime"
  range-separator=""
  start-placeholder="开始时间"
  end-placeholder="结束时间"
  placeholder="选择时间范围"
>
</el-time-picker>
// 日期回显处理
this.dataTime = [new Date('2023/01/01 ' + row.beginTime), new Date('2023/01/01 ' + row.endTime)]
// 获取dataTime的值
[
  Sun Jan 01 2023 05:00:00 GMT+0800 (中国标准时间), 
  Sun Jan 01 2023 08:00:00 GMT+0800 (中国标准时间)
]

  • 经过日期转换之后,回显正常,但获取到的值是标准日期格式
<el-time-picker
  is-range
  v-model="dataTime"
  range-separator=""
  :picker-options="pickerOption"
  value-format="HH:mm:ss"
  start-placeholder="开始时间"
  end-placeholder="结束时间"
  placeholder="选择时间范围"
>
</el-time-picker>
  • 添加format格式化之后,回显后不修改获取的值仍是标准日期格式;修改任一个时间就是时分秒的格式。

以上的倒还好说,自己做下转化处理应该也能解决。但是在新增时候有一点是最不符合需求的:开始-结束的时间有多个,有的时必填项,有的时非必填项。

而is-range版本不符合需求的原因就是必须要默认值。。。(新增情况下怎么可能会给非必填项赋默认值,抓狂!!!)

所以在之后就改成时间分离的版本,使用两个时间选择器。

el-time-picker分离版

参照官方例子,默认值要讲述进行日期转化处理。(写文章时才发现问题,后续再讲,是真的坑。。。)
在这里插入图片描述

初始版本

  • 新增数据
<el-time-picker v-model="beginTime" />
<span></span>
<el-time-picker v-model="endTime"/>

// 不选择时间  
// { beginTime:undefined,endTime:undefined }
// 选择时间    
// { beginTime:Sun Jan 01 2023 17:11:20 GMT+0800 (中国标准时间),
//   endTime:Sun Jan 01 2023 17:12:22 GMT+0800 (中国标准时间)
// }

这样的话,不选时间时得到的值是undefined,选择时间后的值是标准时间格式,

  • 编辑数据
// 数据处理
this.beginTime = new Date('2023/01/01 ' + row.beginTime)
this.endTime = new Date('2023/01/01 ' + row.endTime)
// 不修改/修改时间    
// { beginTime:Sun Jan 01 2023 17:11:20 GMT+0800 (中国标准时间),
//   endTime:Sun Jan 01 2023 17:12:22 GMT+0800 (中国标准时间)
// }

而需求上要求的是时-分-秒格式。所以针对显示问题,加了format和value-format。

format版本

  • format是在pickerOption中,是页面中选中时间的显示格式
  • value-format是获取值的显示格式
<el-time-picker
  v-model="beginTime"
  :picker-options="pickerOption"
  value-format="HH:mm:ss"
/>
<span></span>
<el-time-picker 
  v-model="endTime"
  :picker-options="pickerOption"
  value-format="HH:mm:ss"/>
// js部分
pickerOption: {
  format: 'HH:mm:ss'
}

二者的区别在于格式显示的选择不同,

TimePicker中format的选择格式为:小时:HH,分:mm,秒:ss,AM/PM A而value-format的选择格式则为日期格式,时分秒的部分是相同的,也有另外一部分,(12小时制和24小时制)主要区别在于:大写是24小时,小写为12小时;单字母为不补0格式,双字母补0;大写A代表AM/PM,小写a代表am/pm 。

加完之后,不选择时候为空字符串,选完为HH:mm:ss格式。但还有问题。

问题在于: 详情数据回显时候,是以new Date() 格式填充,如果不做修改,获取的值就会是标准时间格式,而不是value-format规定的格式,所以就是个坑,具体情况如下:

// 回显后不做修改(Date格式)
beginTime Sun Jan 01 2023 17:11:20 GMT+0800 (中国标准时间),
endTime   Sun Jan 01 2023 17:15:20 GMT+0800 (中国标准时间),

// 回显后修改(String格式)
firstBeginTime 17:11:20
firstEndTime   17:15:20

所以,我这里就做了一下处理:如果获取得值不为字符串,则进行日期格式的处理。还单独封装了个函数,经过函数处理后,再转化为时分秒格式。

transTimeFormat (time) {
  if (typeof time === 'string') {
    const date = parseTime(new Date(), '{y}/{m}/{d}')
    time = date + ' ' + time
  }
  return time
},

这里算是勉强可以使用,功能正常,新增和编辑情况下获取的值都是时分秒格式的字符串。这也是我交上去的代码初版。

最新版

但是,在我写这篇文章的时候才发现一个细节:分离版的时间选择器绑定的值可以是字符串!!!
在这里插入图片描述
这个细节也是我无意间测试出来的。

在分离版的第一份代码里,还没有处理回显时的日期转化时,值的结果情况与之前一样。

<el-time-picker v-model="beginTime" />
<span></span>
<el-time-picker v-model="endTime"/>

比较偶然的是,加了format之后,我依旧没有处理回显时的日期转化,但此刻的情况变了

<el-time-picker
  v-model="beginTime"
  :picker-options="pickerOption"
  value-format="HH:mm:ss"
  style="width:180px"
/>
<span></span>
<el-time-picker
  v-model="endTime"
  :picker-options="pickerOption"
  value-format="HH:mm:ss"
  style="width:180px"
/>
  • 新增情况:未选择时为空字符串,选择后为时分秒格式
  • 回显情况:回显正常,修改与否都为时分秒格式

天!!!这就是我希望的情况,是什么原因呢?所以我就发现了v-model绑定的格式问题

怪我,怪我学艺不精,囫囵吞枣。。。

antd design react

这一份的内容,主要作用是进行下对比。在学习React相关东西,就拉过来做个比较,我觉得这种问题肯定每个框架都会遇到,但各自的处理应该会不一样。

代码比较简略,莫介意哈

TimePicker

react中引入了moment插件,在给时间选择器回显的时候,先经过moment处理,不然会报错。

这样就导致了就是未修改的情况和修改的情况下获取到的值都是moment对象,在提交时候需要进行一次moment处理。(诶!这好像和我处理的方式有点像啊😎,略同,略同,哈哈哈)

Form.setFieldsValue({
  time: moment(time, 'HH:mm:ss')
})
<Form
  form={addOrEditForm}
  labelCol={{ span: 4 }}
  wrapperCol={{ span: 16 }}
>
  <Form.Item
    label="时间"
    name="time"
    rules={[{ required: true, message: '请选择时间' }]}
  >
    <TimePicker size="large" format='HH:mm' />
  </Form.Item>
</Form>

Form
.validateFields()
.then((values) => {
  let time = moment(values.time).format('HH:mm:ss')
  console.log(time);
})

其他的就不在多对比了,主要内容还是最新版的正确。话说有没有和我一样遭遇的同学,欢迎评论区畅谈心路历程(本人OS: 坑,大坑,一大坑,是一大坑,就是一大坑)

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

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

相关文章

2023年要来了。顺便分享过来后我的学开车经历

你好呀&#xff0c;读者朋友们&#xff01;我是你们的老朋友 zhen guo时光如梭&#xff0c;转眼间我这边再有1个来小时就2023年了&#xff0c;因时差&#xff0c;很多看到这里的读者朋友应该都已经进入2023年。2022年再也回不去了&#xff0c;就像曾经过去的每一年那样&#xf…

【王道操作系统】2.3.1 进程的同步与互斥

进程的同步与互斥 文章目录进程的同步与互斥1.进程同步2.进程互斥1.进程同步 同步也称为直接制约关系在多道程序环境下&#xff0c;进程是并发执行的&#xff0c;不同进程之间存在着不同的相互制约关系。为了协调进程之间的相互制约关系,如等待、传递信息等&#xff0c;引入了…

IP协议重点总结(附实例)

文章目录前言一、IP地址1.1 概念1.2 作用1.3 格式1.4 组成1.5 分类二、NAT地址转换2.1 作用2.2 转换过程2.3 NAPT端口映射2.4 现实中的栗子&#xff08;以博主的手机为例&#xff09;2.4.1 连无线WLAN的情况2.4.2 用流量上网2.5 NAT的缺陷三、子网掩码3.1 格式3.2 作用3.3 计算…

windows安装IIS服务

安装ASP的环境IIS 1、使用快捷键 【Win X】 打开系统功能菜单&#xff0c;选择【程序和功能】 2、进入【程序和功能】界面管理后&#xff0c;点击【启用或关闭windows功能】。 3、然后保证以下勾选&#xff0c;其他的默认就行&#xff0c;点击确定。如图&#xff1a; 4、出现…

vueJs中的watch与watchEffect函数

前言有时&#xff0c;我们需要在状态变化时执行一些副作用,比如:监听路由状态,更改DOM,或是根据异步操作的结果去修改另一处的状态这个时候,就需要用到监听器在组合式API中,就可以使用watch函数在每次响应式状态发生变化时触发回调函数01使用watch监视refwatch:监听某个属性的变…

2023.01/1801. 积压订单中的订单总数

1801. 积压订单中的订单总数 题意: 给你一个二维整数数组 orders &#xff0c;其中每个 orders[i] [pricei, amounti, orderTypei] 表示有 amounti 笔类型为 orderTypei 、价格为 pricei 的订单。 订单类型 orderTypei 可以分为两种&#xff1a; 0 表示这是一批采购订单 buy …

3D打印:FDM打印使用CURA4.13.1版本配置

一、前言 今天是2023年1月1日&#xff0c;新年阳历的第一天&#xff0c;在整理CSDN和写年度计划&#xff0c;对2022的总结&#xff0c;就像写一篇博客来分享一下我2022年积累的最多的一项经验&#xff0c;就是使用3D打印机&#xff0c;在2022年我先后入手了3台3d打印机&#x…

聊聊数字化转型是个啥

“国有企业首要的职责&#xff0c;就是实现国有资产保值增值。这是衡量国企工作优劣的关键&#xff01;” ——李克强 如果你开了一家制衣厂&#xff0c;雇佣了10个员工买了10台缝纫机&#xff0c;假设一天可以生产100件衣服。 做老板的你想要提高这家工厂的生产数量&#xff0…

禾元生物冲刺科创板上市:累计亏损超4亿元,贝达药业为主要股东

12月30日&#xff0c;武汉禾元生物科技股份有限公司&#xff08;下称“禾元生物”&#xff09;在上海证券交易所递交招股书&#xff0c;准备在科创板上市。本次冲刺上市&#xff0c;禾元生物计划募资35.02亿元&#xff0c;将用于植物源重组人血清白蛋白产业化基地建设项目、新药…

更多的可能

1986年12月&#xff0c;路遥的《平凡的世界》出版了&#xff0c;1992年11月17日路遥去世了&#xff0c;享年43岁&#xff0c;距今30年了……人的一生常常是白驹过隙&#xff0c;忽然而已&#xff0c;人们也常常用星空里的流星比喻&#xff0c;细细想来&#xff0c;这还算是夸张…

IDEA集成Gitee,超简单

1. 在IDEA下载Gitee插件 file-Settings-Plugins搜索Gitee&#xff0c;并且install这样IDEA就集成了Gitee 2. 从远程仓库拉取项目 如果打开IDEA已经有项目了&#xff0c;那就先file-close退出&#xff0c;回到这个初始化页面VCS&#xff1a;version control system版本控制系…

怎样提升go中的RSA解密速度2~3倍

背景 我们的业务中大量的使用了RSA加密后的数据包&#xff0c;每个数据包大概17-30K不等&#xff0c;因为从php迁移到go,RSA解密业务是无法避免的&#xff0c;之前一直以为迁移后go的解密速度即使没有php快&#xff0c;但也应该相同因此使用了go中x509.ParsePKCS1PrivateKey和…

公务员国考省考小白需知

文章目录&#xff1a; 一&#xff1a;分类 国考 省考 二&#xff1a;必备途径 1.相关网站 1.1 官网 1.2 机构 1.3 时事 1.4 资源 2.相关公主号 3.应用 三&#xff1a;相关需知 1.考试内容 2.老师选择 3.相关 4.公务员行政级别划分表 一&#xff1a;分类 国考…

嵌入式:ARM最小系统设计详解

文章目录一、什么是最小系统最小系统结构框图最小系统例板嵌入式最小系统硬件功能二、时钟和功率管理( 一 ) 时钟管理1、时钟电路结构2、锁相环 PLL( 二 ) 功率管理正常模式空闲模式低速模式掉电模式三、电源电路设计四、复位电路设计五、JTAG电路六、存储器扩展特性存储器映射…

程序员面试金典8.*

文章目录8.1三步问题8.2迷路的机器人8.3魔术索引8.4求幂集8.5递归乘法8.6 汉诺塔8.7无重复字符串的排列组合(☆)8.8有重复字符的排列组合8.9括号8.10颜色填充8.11硬币8.12八皇后8.1三步问题 一个基础的动态规划问题&#xff0c;pass dp[i]dp[i-1] dp[i-2] dp[i-3] dp[1]1, dp[…

linux系统中串口驱动的基本实现原理

大家好&#xff0c;今天主要和大家聊一聊&#xff0c;如何利用linux系统中的串口驱动。 目录 第一&#xff1a;linux系统中UART驱动框架 第二&#xff1a;uart_ops的具体实现 第三&#xff1a;串口驱动设备树的添加 第一&#xff1a;linux系统中UART驱动框架 向SPI一样&am…

ansible第二天作业

## 安装并且配置ansible 1)安装和配置ansible以及ansible控制节点server.example.com如下&#xff1a; 2)创建一个名为/home/student/ansible/inventory的静态库存文件如下所示&#xff1a; 2.1)node1 是dev主机组的成员 2.2)node2是test主机组的成员 2.3)node1和node2是prod主…

【JAVA】生产消费者问题

生产者/消费者问题是一个共享资源的问题&#xff0c;即生产者生产的产品不能超过最大存储量&#xff0c;而消费者消费的产品不能多于剩下的产品数量。 解决方法有很多种&#xff0c;这里通过同步线程锁&#xff1a; synchronized 但是仅仅使用线程锁是不足的&#xff0c;因为…

ElasticsSearch7.6.1学习笔记【狂神说Java】

文章目录一、ElasticSearch概述二、安装elasticsearch-7.6.1&#xff0c;基于windows 101、解压安装包以及目录结构介绍2、安装可视化插件elasticsearch-head3、解决跨域问题三、安装Kibana四、核心概念五、IK分词器插件1、什么是ik分词器2、解压3、进入kibana测试4、自定义扩展…

状态压缩DP——蒙德里安的梦想

状态压缩DP——蒙德里安的梦想一、题目描述二、思路分析1、状态表示——状态压缩2、状态转移3、循环4、初始化三、代码一、题目描述 二、思路分析 这道题中&#xff0c;其实刚一看是非常的抽象的&#xff0c;也是非常麻烦的。麻烦的点在于我们既需要考虑横着放的方块&#xff…