飞道的博客

Element-ui el-time-picker绑定的数据更新后不渲染的问题

332人阅读  评论(0)

问题:

点击绿色按钮后时间选择器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
查看评论
* 以上用户言论只代表其个人观点,不代表本网站的观点或立场