如果你想实现一个自定义的日期组件规则如下:日期组件未点开前左右两边有前一天后一天控制箭头,且前一天后一天有数据时才显示箭头,没有数据时,快速切换箭头隐藏。当日期组件点开后,有数据的天为可点击状态,无数据的为不可点击状态。

  那么,我们可以在已有的element-ui日期组件的基础上去实现这个功能。

  如下是element-ui中给的例子,表示日历中时间大于当前时间的天数均为不可点击状态。即return true时为不可点击状态。

  

<el-date-picker
v-model="value2"
align="right"
type="date"
placeholder="选择日期"
:picker-options="pickerOptions1">
</el-date-picker> export default {
data() {
return {
pickerOptions1: {
disabledDate(time) {
return time.getTime() > Date.now();
}
}
}
}
}

可做如下修改:

 <div class="date">
<span class="el-icon-arrow-left arrow
" @click="forward" v-show="forwardShow"></span>
<el-date-picker
v-model="timevalue"
value-format="yyyy-MM-dd"
format="yyyy-MM-dd"
type="date"
:picker-options="pickerOptions1"
@change="timeChange">
</el-date-picker>
<span class="el-icon-arrow-right arrow" @click="back" v-if="backShow">
</span>
</div>
data() {
  //注意此处得用let that = this;然后再通过that.dataArr来访问存后台返回的数据的日期数组,因为如果通过this是访问不到这个数组变量的。
let that = this;
return {
forwardShow: true,
backShow: true,
dataArr: [],
pickerOptions1: {
disabledDate(time) {
var y = time.getFullYear();
var mo = time.getMonth();
var da = time.getDate();
var newTime = y + '-' + (mo + 1) + '-' + da;
var flag = true;
that.dataArr.forEach(function (element) {
if (element === newTime) {
flag = false;
}
});
return flag;
}
},
replaceShow: false,
timevalue: ''
};
}, // 获取当前时间
getCurrTime() {
var now = new Date();
this.timevalue = now;
},
// 日期选择时触发的change事件
timeChange() {
// var y = this.timevalue.getFullYear();
// var mo = this.timevalue.getMonth();
// var da = this.timevalue.getDate();
// var newTime = y+"-"+(mo+1)+"-"+da;
var timestamp = this.timevalue.getTime() - 86400000;
this.isForward(timestamp);
var tamp = this.timevalue.getTime() + 86400000;
this.isBack(tamp);
},
// 点击前一天日期箭头触发的事件
forward() {
var timestamp = this.timevalue.getTime() - 86400000;
var forwardTime = new Date(timestamp);
this.timevalue = forwardTime;
var tamp = timestamp - 86400000;
this.isForward(tamp);
},
// 点击后一天日期箭头触发的事件
back() {
var timestamp = this.timevalue.getTime() + 86400000;
var backTime = new Date(timestamp);
this.timevalue = backTime;
var tamp = timestamp + 86400000;
this.isBack(tamp);
},
// 判断前一天切换按钮是否隐藏
isForward(timestamp) {
var forwardTime = new Date(timestamp);
var y = forwardTime.getFullYear();
var mo = forwardTime.getMonth();
var da = forwardTime.getDate();
var newForward = y + '-' + (mo + 1) + '-' + da;
var flag = true;
this.dataArr.forEach(function (element) {
if (element === newForward) {
flag = false;
}
});
if (flag) {
this.forwardShow = false;
}
else {
this.forwardShow = true;
}
},
// 判断后一天切换按钮是否隐藏
isBack(tamp) {
var backTime = new Date(tamp);
var by = backTime.getFullYear();
var bmo = backTime.getMonth();
var bda = backTime.getDate();
var newBack = by + '-' + (bmo + 1) + '-' + bda;
var flag = true;
this.dataArr.forEach(function (element) {
if (element === newBack) {
flag = false;
}
});
if (flag) {
this.backShow = false;
}
else {
this.backShow = true;
}
},

最后,我们就可以实现需求中的效果了。

改写element-ui中的日期组件的更多相关文章

  1. Element ui 中使用table组件实现分页记忆选中

    我们再用vue和element-ui,或者其他的表格的时候,可能需要能记忆翻页勾选,那么实现以下几个方法就ok了 示例如下 <el-table :data="tableData&quo ...

  2. 关于Element UI中页面样式小问题

    一,修改组件dialog窗口的大小 二,在我使用upload组件上传一张美女图片时,发现当预览图片时,图片是灰色的,点击一下才会变亮,这种效果使我很不舒服,于是我通过添加下面的一条样式,问题解决了(可 ...

  3. 关于Element UI中select组件中遇到的问题

    问题一:在使用select组件设置多选功能后,窗口抖动问题? 详细描述:在我使用select做多选的功能时出现了窗口抖动的问题,测试的时候发现,在有些人的电脑上抖动,有些人的电脑上不抖,找了很多文档, ...

  4. Element UI 中组件this.$message报错

    最近在做毕设的时候,用Element UI中的消息提示message一直报以下的错误: 展示的效果也不好看,没有图标什么的: 但我明明有在main.js引入了element-ui 呀,因为毕设时间很赶 ...

  5. vue+element ui中select组件选择失效问题原因与解决方法

    codejing 2020-07-10 09:13:31  652  收藏 分类专栏: Web Vue Element UI 版权 .当表单form赋完值后,如果后续又对form中某一属性值进行操作如 ...

  6. element ui 中的 resetFields() 报错'resetFields' of undefined

    每次做各种form表单时,首先要注意的是初始化,但是刚开始若没有仔细看文档,则会自己写个方法将数据设置为空,但是这样就会出现一个问题,表单内存在各种验证,假如是一个弹框内有form表单,弹框出现就执行 ...

  7. element ui中的一些小技巧

    最近写公司的项目,这项目是vue和element ui搭建的, 做的是一套电力系统的管理平台.  遇到一个小麻烦,用过element ui 的都知道,使用element ui 弹框,点击空白处,默认是 ...

  8. Element ui 上传文件组件(单文件上传) 点击提交 没反应

    element ui 第一次上传文件后 上传其他文件再次点击不再次提交 需要使用 clearFiles 清空已上传文件列表 这时候在次点击 上传按钮 就会惊喜的发现 可以上传了使用方法 this.$r ...

  9. 在基于ABP框架的前端项目Vue&Element项目中采用日期格式处理,对比Moment.js和day.js的处理

    Day.js 是一个轻量的处理时间和日期的 JavaScript 库,和 Moment.js 的 API 设计保持完全一样. 如果您曾经用过 Moment.js, 那么您已经知道如何使用 Day.js ...

随机推荐

  1. 用SQL快速删除U8账套

    一.问题提出 通过"系统管理"来删除999账套,首先要求你备份然后才能删除.头痛的是: 1)备份需要发费很长的时间,特别是账套数据文件比较大时. 2)备份时,你的本本基本处于死机状 ...

  2. python全栈开发 * 07知识点汇总 * 180607

    07  set集合,深浅拷⻉以及部分知识点补充 一.while,for 循环知识点补充 二.int, str的相关操作 1.列表变字符串 # lst=["红","橙&qu ...

  3. javascript 窗口宽高滚动

    //不加window IE不支持 console.info(window.screenLeft);//IE支持火狐不支持 console.info(window.screenX);//火狐支持,IE不 ...

  4. [Day12]构造方法、关键字this、super

    1.构造方法:对象创建时要执行的方法 (1)构造方法的格式: 修饰符 构造方法名(参数列表){} 体现: a.构造方法没有返回值类型,也不需要返回值 b.构造方法名称必须和类型保持一致 c.构造方法没 ...

  5. zabbix报错排错大全

    zabbix报错 https://www.cnblogs.com/losbyday/category/876878.html作者总结的很全棒 1.在启动zabbix-agent 时系统日志输出 PID ...

  6. gitlab备份、恢复、升级

    1.备份 gitlab的备份很简单,只要使用命令: gitlab-rake gitlab:backup:create 即可将当前的数据库.代码全部备份到/var/opt/gitlab/backups ...

  7. dyld_shared_cache_extract_dylibs failed

    文章来源:https://www.jianshu.com/p/e276a784fbee   s.png 数据线插上手机 Xcode->window   3.png   2.png 点击Unpai ...

  8. 编写Shell脚本的最佳实践

    编写Shell脚本的最佳实践 http://kb.cnblogs.com/page/574767/ 需要记住的 代码有注释 #!/bin/bash # Written by steven # Name ...

  9. Python Async/Await入门指南

    转自:https://zhuanlan.zhihu.com/p/27258289 本文将会讲述Python 3.5之后出现的async/await的使用方法,以及它们的一些使用目的,如果错误,欢迎指正 ...

  10. PHP多维数组转一维

    目录 1. array_column函数 2. array_walk函数 3. array_map函数 4. foreach循环 5. array_map变种 参考:https://www.awaim ...