iView DatePicker v-model和@on-change同时使用的坑

iView DatePicker v-model和@on-change同时使用,在选择日期使用时无问题,但是通过日期输入框手动输入日期后存在问题,特此记录。

1. 环境

"iview": "^3.5.4",
"vue": "^2.6.14"

2. 问题描述

我想选择日期向后端发送2022-11-01这种格式的String,而不是发送Date。
测试页面很简单,一个日期框+input框+查询按钮,input框和日期框绑定的同一个元素,用来展示日期的值,点击查询按钮弹出提示框提示日期的值。

  • 首先正常选择日期,日期是正常的。
    gif1
  • 通过日期输入框输入后,日期on-change不生效,还是Date类型。
    gif2

3. 解决办法

发现了问题,就会发现解决方法其实有很多。

  1. 日期文本框不可输入:editable="false"
  2. 在提交的时候判断为Date类型则format
if (util.typeOf(date) === 'date') {
    date =date.Format('yyyy-MM-dd')
}
  1. 使用 :value代替v-model 我更喜欢这种解决方法。
<DatePicker :value="searchDate"  @on-change="searchDateChange"> </DatePicker>

4.源代码

<template>
  <div>
    <h1>Date Test</h1>
    <Row>
      <DatePicker
          type="date"
          v-model="searchDate"
          @on-change="searchDateChange"
          placeholder="选择查询日期"
          :clearable="false"
      >
      </DatePicker>
      <Input  style="margin-left: 20px;width: 320px" v-model="searchDate"></Input>
      <Button type="primary" @click="doSearch" style="margin-left: 20px">查询</Button>
    </Row>
  </div>
</template>
<script>
export default {
  name: 'MainTest',
  data(){
    return{
      searchDate:'2022-11-01'
    }
  },
  methods:{
    searchDateChange(value){
      this.searchDate = value
      console.log(this.searchDate)
    },
    doSearch(){
      this.$Message.info(this.searchDate+'');
      console.log(this.searchDate)
    }
  }
}
</script>
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小雅痞

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值