改写element-ui中的日期组件
如果你想实现一个自定义的日期组件规则如下:日期组件未点开前左右两边有前一天后一天控制箭头,且前一天后一天有数据时才显示箭头,没有数据时,快速切换箭头隐藏。当日期组件点开后,有数据的天为可点击状态,无数据的为不可点击状态。
那么,我们可以在已有的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中的日期组件的更多相关文章
- Element ui 中使用table组件实现分页记忆选中
我们再用vue和element-ui,或者其他的表格的时候,可能需要能记忆翻页勾选,那么实现以下几个方法就ok了 示例如下 <el-table :data="tableData&quo ...
- 关于Element UI中页面样式小问题
一,修改组件dialog窗口的大小 二,在我使用upload组件上传一张美女图片时,发现当预览图片时,图片是灰色的,点击一下才会变亮,这种效果使我很不舒服,于是我通过添加下面的一条样式,问题解决了(可 ...
- 关于Element UI中select组件中遇到的问题
问题一:在使用select组件设置多选功能后,窗口抖动问题? 详细描述:在我使用select做多选的功能时出现了窗口抖动的问题,测试的时候发现,在有些人的电脑上抖动,有些人的电脑上不抖,找了很多文档, ...
- Element UI 中组件this.$message报错
最近在做毕设的时候,用Element UI中的消息提示message一直报以下的错误: 展示的效果也不好看,没有图标什么的: 但我明明有在main.js引入了element-ui 呀,因为毕设时间很赶 ...
- vue+element ui中select组件选择失效问题原因与解决方法
codejing 2020-07-10 09:13:31 652 收藏 分类专栏: Web Vue Element UI 版权 .当表单form赋完值后,如果后续又对form中某一属性值进行操作如 ...
- element ui 中的 resetFields() 报错'resetFields' of undefined
每次做各种form表单时,首先要注意的是初始化,但是刚开始若没有仔细看文档,则会自己写个方法将数据设置为空,但是这样就会出现一个问题,表单内存在各种验证,假如是一个弹框内有form表单,弹框出现就执行 ...
- element ui中的一些小技巧
最近写公司的项目,这项目是vue和element ui搭建的, 做的是一套电力系统的管理平台. 遇到一个小麻烦,用过element ui 的都知道,使用element ui 弹框,点击空白处,默认是 ...
- Element ui 上传文件组件(单文件上传) 点击提交 没反应
element ui 第一次上传文件后 上传其他文件再次点击不再次提交 需要使用 clearFiles 清空已上传文件列表 这时候在次点击 上传按钮 就会惊喜的发现 可以上传了使用方法 this.$r ...
- 在基于ABP框架的前端项目Vue&Element项目中采用日期格式处理,对比Moment.js和day.js的处理
Day.js 是一个轻量的处理时间和日期的 JavaScript 库,和 Moment.js 的 API 设计保持完全一样. 如果您曾经用过 Moment.js, 那么您已经知道如何使用 Day.js ...
随机推荐
- Linux命令vi/vim 使用方法讲解
vi/vim 基本使用方法 vi编辑器是所有Unix及Linux系统下标准的编辑器,它的强大不逊色于任何最新的文本编辑器,这里只是简单地介绍一下它的用法和一小部分指令.由于对Unix及Linux系统的 ...
- android json解析及简单例子+Android与服务器端数据交互+Android精彩案例【申明:来源于网络】
android json解析及简单例子+Android与服务器端数据交互+Android精彩案例[申明:来源于网络] android json解析及简单例子:http://www.open-open. ...
- 山东13年省赛 Aliceand Bob
Problem F: Alice and Bob Description Alice and Bob like playing games very much.Today, they introduc ...
- hadoop-1.0.1根目录下的jar包
- React Router API文档
React Router API文档 一.<BrowserRouter> 使用HTML5历史记录API(pushState,replaceState和popstate事件)的<Rou ...
- Memcache&Redis
Memcached 是一个高性能的分布式内存对象缓存系统,用于动态Web应用以减轻数据库负载.减少数据库读取次数来提高网站速度 先在一台机器安装memcache 然后使用Python 安装pip3 i ...
- scala-actor线程间通信
import scala.actors.Actor case class Msg(val info: String, act1: MyActor1) class MyActor extends Act ...
- cestos7安装zookeeper
zookeeper安装包下载地址http://archive.apache.org/dist/zookeeper/ 一.单机 在/usr目录下 curl -L-O http://archive.apa ...
- 与图论的邂逅01:树的直径&基环树&单调队列
树的直径 定义:树中最远的两个节点之间的距离被称为树的直径. 怎么求呢?有两种官方的算法(不要问官方指谁我也不晓得): 1.两次搜索.首先任选一个点,从它开始搜索,找到离它最远的节点x.然后从x开始 ...
- 记使用talend从oracle抽取数据时,数字变为0的问题
数据源为oracle,字段类型为number. 发现通过mainline连接到一个logrow控件,输入的该字段的值为0 经过多次测试还是没发现有什么规律. 通过查看代码发现有这一句内容. if (r ...