问题:
点击绿色按钮后时间选择器el-time-picker绑定的timevalue值在控制台打印出来发现确实后退了15分钟,但是el-time-picker中渲染出来的值并没有发生改变。就是说我console.log(this.timevalue[0],this.timevalue[1]),发现确实变化了,但前端时间选择器里的时间数值并没有改变。
注:el-time-picker中的时间是一个时间范围的形式,所以说虽然它只绑定了一个变量(v-model=timealue),但是在控制台可以通过timevalue[0]和timevalue[1]将前后时间点给打印出来。感觉这个地方有点神奇。有兴趣的同学可以将timealue打印出来看看是啥样的格式。
解决方法:
时间选择器中使用v-if语句。然后在修改时间的函数中使用回调函数来更改hackReset的值。下面是修改时间(将时间往前推15分钟)的函数。
console.log(this.timevalue[0]) //x:x:x
var splittime0 = this.timevalue[0].split(':');
var base = new Date(); //Tue Mar 16 2021 16:31:17 GMT+0800 (中国标准时间)
base.setHours(splittime0[0]);
base.setMinutes(splittime0[1]);
base.setSeconds(splittime0[2]);
var basetime = base.getTime(); //getTime()方法返回 1970 年 1 月 1 日至今的毫秒数
var step = 15*60*1000; //15分钟的毫秒数
base.setTime(basetime+=step); //setTime()方法以毫秒设置Date对象。
console.log("base:"+base) //base:Tue Mar 16 2021 16:34:31 GMT+0800 (中国标准时间)
var preTime0=[base.getHours()<10?'0'+base.getHours():base.getHours(),base.getMinutes()<10?'0'+base.getMinutes():base.getMinutes(),base.getSeconds<10?'0'+base.getSeconds():base.getSeconds()].join(':');
this.timevalue[0]=preTime0;
var splittime1 = this.timevalue[1].split(':');
var base = new Date(); //Tue Mar 16 2021 16:31:17 GMT+0800 (中国标准时间)
base.setHours(splittime1[0]);
base.setMinutes(splittime1[1]);
base.setSeconds(splittime1[2]);
var basetime = base.getTime(); //getTime()方法返回 1970 年 1 月 1 日至今的毫秒数
var step = 15*60*1000; //15分钟的毫秒数
base.setTime(basetime+=step); //setTime()方法以毫秒设置Date对象。
var preTime1=[base.getHours()<10?'0'+base.getHours():base.getHours(),base.getMinutes()<10?'0'+base.getMinutes():base.getMinutes(),base.getSeconds<10?'0'+base.getSeconds():base.getSeconds()].join(':');
this.timevalue[1]=preTime1;
this.hackReset=false,
this.$nextTick(()=>{
this.hackReset=true;
})
注:还有另外一种情况,就是如果el-time-picker的格式只是一个时间点,不是时间范围,如下图所示:
这样的话前端渲染出来的值就可以随着你点击按钮而及时更新了,至于为啥会这样,还不太清楚。可能是因为这样的话绑定的timevalue就不再是一个数组了吧。就是说打印的话就直接console.log(this.timevalue)就OK了,不需要像上一种情况那样加下标。
转载:https://blog.csdn.net/qq_42456564/article/details/114926034
查看评论