VUE 时间控件赋值失败

问题

前端界面,点击时间控件时,控制其的最大输入。当赋值的类型为 String 的时候,只能成功第一次,后面的赋值不再是设置好的最大值,而是控件点击的值。但当赋值的类型为 date 时,却能一直成功。

// 时间控件
dtLastMenstrualPeriod.$on("change",function (e) {
    // 2020-07-08
    let createDate = dtCreate.value.substring(0, 10)
    // 时间控件选择的时间 2022-07-08
    let datePeriod = e.value;
    var cDate = new Date(createDate)
    var dDate = new Date(datePeriod)
    if (cDate > dDate) {
        form.setFormFieldValue('dtLastMenstrualPeriod', datePeriod)
    } else {
        // 断点一直能进入
        // string 第一次能成功赋值,连续赋值则出错,但是 debugger 也能进入
        form.setFormFieldValue('dtLastMenstrualPeriod', createDate)
       
      	// date 可以一直成功
        form.setFormFieldValue('dtLastMenstrualPeriod', bDate)
    }
})

原因

打的断点一直能成功进入。所以应该是 String 类型进行数据注入后,会被控件的值再次渲染。

为什么第一次会成功?

猜测:控件上的值类型转换:date -> stringstring -> string 耗费的时间不一致$on("change") 监听的时间过早,导致赋值会被重新渲染

解决

NextTick 的引入
在这里插入图片描述

原理:Vue 在更新 DOM 时是异步执行的。当数据发生变化,Vue将开启一个异步更新队列,视图需要等队列中所有数据变化完成之后,再统一进行更新

$nextTick(() => {
    // 此时,控件本身的点击渲染已结束,再次赋值,将不会被更新
	form.setFormFieldValue('dtLastMenstrualPeriod', bDate.format('yyyy-MM-dd'))
})
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值