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 ...
随机推荐
- css实现两个div并排等高(一个div高度随另一个高度变化而变化)
方法一.两个div都设置 display: table-cell; 方法二.父级div设置 display: -webkit-box;
- C语言——枚举类型用法
1.枚举的定义 enum 枚举名{ 枚举元 素1,枚举元素2,枚举元素3...}: 2.使用枚举类型的好处 增加程序的可读性,我们都知道在计算机中所有信息都是用二进制来表示的,如果你用二进制来表示某件 ...
- hive模拟数据
人员表 id,姓名,爱好,住址 1,小明1,lol-book-movie,beijing:mashibing-shanghai:pudong 2,小明2,lol-book-movie,beijing: ...
- mysql如何查询一个字段在哪几张表中
SELECT TABLE_SCHEMA,TABLE_NAME FROM information_schema.`COLUMNS` WHERE COLUMN_NAME = 'xxx' ; xxx替换成需 ...
- vue打包后element-ui部分样式(图标)异常问题
vue项目使用element-ui组件,打包后部分样式(上下左右箭头)异常,变成方框了. 页面报warn错误,有个字体找不到. 解决办法:在build文件夹下找到utils.js,加上一行public ...
- Vue 上传图片压缩 的问题
前言 也是很少来写博客了,也是赖吧,哈哈 最近新的进度里有上传图片太大,需要前台进行图片压缩问题,然后查阅了相关资料 上传图片大于100* 1024 的用canvas 来压缩来解决 然后IOS拍照上传 ...
- python(Django2.0) 安装
前言 哇 ,python 是真的强大,看看如何安装的python: 下载咯 在python的官网下载python对应版本:https://www.python.org/downloads/window ...
- Mapnik使用postgres中的栅格数据
XML: <?xml version="1.0" encoding="utf-8"?> <Map background-color=" ...
- Zabbix MySQL监控模板添加
zabbix自带的mysql监控指标很少,所以需要新增一些监控项 1.下载知数堂维护的percona-monitoring-plugin-zabbix代码 # cd /opt # wget https ...
- 游标定位:Cursor类
关于 Cursor Cursor 是每行的集合. 使用 moveToFirst() 定位第一行. 你必须知道每一列的名称. 你必须知道每一列的数据类型. Cursor 是一个随机的数据源. 所有的数据 ...