element 库 date-picker 的 disabledDate 的坑
概述
今天使用 element 库的 date-picker 组件,使用日期范围,然后使用了 disabledDate 属性,把 2018 年 1 月和 2020 年 12 月之后的日期全部 disable 掉的时候,出现了一个小坑,就是点击2018 年 1 月和 2020 年 12 月的时候,点击会变得不顺畅,而且有时候会发生点击无效的情况,点击其它日期是正常的。我试了多种方法,终于把它解决了,记录下来,供以后开发时参考。
有坑的代码
下面是我原先点击不顺畅的代码:
<template>
<div class="block">
<el-date-picker
v-model="value"
type="monthrange"
align="right"
range-separator="至"
start-placeholder="开始月份"
end-placeholder="结束月份"
:picker-options="pickerOptions">
</el-date-picker>
</div>
</template>
<script>
export default {
data() {
return {
pickerOptions: {
disabledDate: (time) => {
return time.getTime() < new Date('2018-01').getTime()
|| time.getTime() > new Date('2020-12').getTime();
},
},
value: '',
};
},
};
</script>
分析原因,可能是 getTime 的锅,我把 time.getTime() 打印出来,发现组件上的 2018 年 1 月的getTime() 值略微大于 new Date('2018-01').getTime()。所以我想可能问题在于getTime,于是我换了一种实现:
<template>
<div class="block">
<el-date-picker
v-model="value"
type="monthrange"
align="right"
range-separator="至"
start-placeholder="开始月份"
end-placeholder="结束月份"
:picker-options="pickerOptions">
</el-date-picker>
</div>
</template>
<script>
export default {
data() {
return {
pickerOptions: {
disabledDate: (time) => {
this.isEarlyThan(time, new Date('2018-01'))
|| this.isEarlyThan(new Date('2020-12'), time);
},
},
value: '',
};
},
methods: {
isEarlyThan(dateA, dateB) {
// dateA 比 dateB 早则为 true(严格小于)
const yearA = dateA.getFullYear();
const yearB = dateB.getFullYear();
if (yearA < yearB) {
return true;
} if (yearA === yearB) {
return dateA.getMonth() < dateB.getMonth();
}
return false;
},
},
};
</script>
结果问题成功解决!!!
另外
另外我发现,如果不指明小时的话,getHours() 会返回 8。示例如下:
new Date('2018-03-01').getHours() // 8
new Date('2018-03').getHours() // 8
new Date(2018, 1, 1, 0, 0, 0).getHours() // 0
所以以后在使用 getHours() 方法的时候需要格外小心,element 库的坑的原因或许也是因为这个。
性能
点击不通畅的问题也可能是性能原因,所以我们比较一下使用 getTime 和使用 isEarlyThan 方法的性能快慢,通过分析代码,可以知道其实主要是比较 getTime 和 getFullYear + getMonth 的性能大小。代码如下:
const date1 = new Date('2018-01');
const date2 = new Date();
console.time('getTime');
date1.getTime() > date2.getTime();
console.timeEnd('getTime');
console.time('getFullYear + getMonth');
date1.getFullYear() > date2.getFullYear();
date1.getMonth() > date2.getMonth();
console.timeEnd('getFullYear + getMonth');
结果 getTime 的性能比 getFullYear + getMonth 的性能要高一些。所以看来使用 getTime 的卡顿现象是组件自身的原因了。
element 库 date-picker 的 disabledDate 的坑的更多相关文章
- javascript date picker
一个简洁的date picker <html><head><meta http-equiv="Content-Type" content=" ...
- iOS开发UI篇—Date Picker和UITool Bar控件简单介绍
iOS开发UI篇—Date Picker和UITool Bar控件简单介绍 一.Date Picker控件 1.简单介绍: Date Picker显示时间的控件 有默认宽高,不用设置数据源和代理 如何 ...
- asp.net使用My97 Date Picker时设置默认起始时间为n年之前的今天
可以使用My97 Date Picker组件来收集用户输入的日期值. 首先下载该组件:http://www.my97.net/dp/index.asp放到自己的项目中. 然后在项目里面引用js和css ...
- Date Picker Calendar For Oracle Forms 6i
Giving date picker calendar option to user for date type fields in Oracle Forms. I am providing you ...
- Freebie: Date Picker Calendar Demo Form For Oracle Forms 6i
I have already posted and provided the required PLSQL Library and the Calendar FMX file in my previo ...
- 微软BI 之SSRS 系列 - 基于时间段参数的 MDX 查询以及时间日历 Date Picker 的时间类型参数化
今天在天善问答里看到一个问题,如果我没有理解错的话,它应该是指比如在一个报表中选取一个时间段,然后求出这个时间段的某个 Measure 的 SUM 和.并且同时求出这两个时间点对应的上一年的时间点之间 ...
- 记录js new Date日期处理的一个坑
记录js日期处理的一个坑 当前时区为北美东部时区时, new Date('2019-4-1') new Date('2019-04-01') 结果是相关一个月的. 如下图 new Date(' ...
- 【踩坑记录】记录一次使用Python logging库多进程打印日志的填坑过程
背景: 项目使用Python自带的logging库来打印日志 项目部署在一台Centos7的机器上 项目采用gunicorn多进程部署 过程: 1.LOG日志代码封装: 采用logging库,并设置w ...
- Date Picker和UITool Bar的使用
p.p1 { margin: 0.0px 0.0px 0.0px 0.0px; font: 13.0px Verdana } span.s1 { } span.s2 { background-colo ...
随机推荐
- SAP发布wbservice,如果有权限管控的话,需要给这个webservice加权限
1. PFCG床架角色 2.在角色菜单上,添加其他,选中Authorization Default Values for Services 如下图 3.选中发布的webservice 后保存,如下图: ...
- 多线程之继承Thread类及多线程内存分析
*创建多线程的一种方式:继承Thread类 * java.lang.Thread是描述多线程的类,要实现多线程程序,一种方式就是继承Thread类 * 1.创建一个类Mythread让其extends ...
- Genymotion模拟器使用camera
1.前言 最近开发react-native的app,上传图片功能需要使用相机,发现Genymotion默认的相机不工作.查看同行的博客解决了,归纳整理一下. 2.步骤 2.1安装Genymotion: ...
- Delphi 语句
- 文件I/O编程 (fcntl)
Fcntl函数语法要点所需头文件:#include #include #include函数原型:int fcntl(int fd,cmd,struct flock ...
- Big Data(三)伪分布式和完全分布式的搭建
关于伪分布式的配置全程 伪分布式图示 1.安装VMWare WorkStation,直接下一步,输入激活码即可安装 2.安装Linux(需要100GB) 引导分区Boot200MB 交换分区Swap2 ...
- 22_3mybaits——连接池
1.连接池 我们在实际开发中都会使用连接池. 因为它可以减少我们获取连接所消耗的时间. 2.mybatis中的连接池 mybatis连接池提供了3种方式的配置: 配置的位置: 主配置文件SqlMapC ...
- Django学习系列2:django环境中安装selenium并查看selenium版本号
在Django环境中安装selenium (django) root@ranxf-TEST:/studydisk/Python_web_TDD/superlists# conda install se ...
- Ubuntu 16.04 编译ORB_SLAM2_modified
编译g2o_with_orbslam2 1.修改g2o/types/slam2d/edge_se2_pointxy_bearing.cpp t.setRotation(t.rotation().ang ...
- idea+maven3.6.1构建maven工程报PKIX:unable to find valid certification path to requested target
转载于 https://www.cnblogs.com/xiaoping1993/p/9717649.html 注意可能在idea工具执行java命令提示找不到类,返回类的最上层包路径 然后再执行j ...