Error in v-on handler (Promise/async): “TypeError: Cannot read property ‘format‘ of undefined“

本文档描述了在使用Ant Design的日期范围选择器时遇到的问题及解决方案。当用户清空时间选择后,搜索导致浏览器报错。通过在`getQuery`方法中增加对时间选择器值的判断,避免了空值导致的错误。同时,修复了点击重置按钮后再搜索时的长度错误,通过在重置后设置时间选择器值为空数组来防止问题发生。这展示了前端开发中处理用户输入和表单验证的重要性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1、代码贴上:
html
<a-form-item label="异常数据发生时间:">
 <a-range-picker
    :ranges="{ '今天': [moment(), moment()], '这个月': [moment(), moment().endOf('month')] }"
    show-time
    format="YYYY/MM/DD HH:mm:ss"
    v-decorator="['happenTime']"
    @change="getTime"
  />
</a-form-item>
js
//获取页面搜索条件
getQuery(){
 let startTm = this.form.getFieldValue('happenTime') ? this.form.getFieldsValue().happenTime[0].format(
   'YYYY-MM-DD HH:mm:ss'): null
 let endtm = this.form.getFieldValue('happenTime') ? this.form.getFieldsValue().happenTime[1].format(
   'YYYY-MM-DD HH:mm:ss'): null
 let query
 // 无时间筛选
 if(!startTm || !endtm) {
   query = {
     stationName: this.form.getFieldsValue().stationName,
     stationType: this.form.getFieldsValue().stationType,
     region: this.form.getFieldsValue().region,
     deviceType: this.form.getFieldsValue().deviceType
   }
 } else {
   query = {
     stationName: this.form.getFieldsValue().stationName,
     stationType: this.form.getFieldsValue().stationType,
     startTm,
     endtm,
     region: this.form.getFieldsValue().region,
     deviceType: this.form.getFieldsValue().deviceType
   }
 }
 return query
},
2、页面效果:

在这里插入图片描述
在这里插入图片描述

3、点击确认获取到时间值,点击搜索也确实拿到时间的参数值,但是,如果你清空掉时间值,然后点击搜索,浏览器就直接报错:

在这里插入图片描述

4、解决:
//获取页面搜索条件
getQuery(){
  console.log(this.form.getFieldValue('happenTime').length)  // 判断是否选中或者清空
  let startTm = this.form.getFieldValue('happenTime').length > 0 ? this.form.getFieldsValue().happenTime[0].format(
    'YYYY-MM-DD HH:mm:ss'): null
  let endtm = this.form.getFieldValue('happenTime').length > 0 ? this.form.getFieldsValue().happenTime[1].format(
    'YYYY-MM-DD HH:mm:ss'): null
  let query
  // 无时间筛选
  if(!startTm || !endtm) {
    query = {
      stationName: this.form.getFieldsValue().stationName,
      stationType: this.form.getFieldsValue().stationType,
      region: this.form.getFieldsValue().region,
      deviceType: this.form.getFieldsValue().deviceType
    }
  } else {
    query = {
      stationName: this.form.getFieldsValue().stationName,
      stationType: this.form.getFieldsValue().stationType,
      startTm,
      endtm,
      region: this.form.getFieldsValue().region,
      deviceType: this.form.getFieldsValue().deviceType
    }
  }
  return query
},
5、需要根据具体情况去给判断条件,有时是 instanceof Object,打印选中日期和未选中的值去做比较就好
6、追加:点击重置按钮,再点击搜索,报length的错, 解决如下:
// 点击重置
handleReset() {
  this.form.resetFields()
  // 防报错,赋值空数组
  this.form.setFieldsValue({
    happenTime: []
  })
},

心有所期,全力以赴,定有所成!

Error in v-on handler (Promise/async): "TypeError: Cannot read properties of undefined" 是一个Vue警告,意味着在一个v-on处理程序中发生了错误。具体错误是试图读取一个未定义的属性。根据引用和提到的报错信息,错误的原因可能是在axios请求中,请求结果被catch捕获,导致无法正确读取到数据。解决方法是在catch中将axios获取到的数据赋值给res,这样就可以避免报错。另外,根据引用提到的错误示范,如果在组件中按需导出某个方法,那么在其他组件中导入该方法时需要使用正确的导入格式,即使用{}进行按需导入。所以,为了解决这个错误,你可以检查你的代码,确保在catch中正确赋值数据,并且在导入方法时使用正确的导入格式。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *3* [[Vue warn]: Error in v-on handler (Promise/async):TypeError: Cannot read property ‘status‘ of ...](https://blog.csdn.net/X_Flandre/article/details/108874420)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] - *2* [vue报错解决:Error in v-on handler (Promise/async):TypeError: Cannot read properties ofundefined](https://blog.csdn.net/weixin_46535880/article/details/120445888)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值