当前位置: 首页 > news >正文

在vue3+ts的项目中,如何解决vant组件自带表单校验不生效?

问题描述:

点击发送验证码后,为了让逻辑更加严谨,使用了vant组件自带的表单校验,进行二次校验,防止验证码发送成功后,登录手机号被二次修改,但根据官网描述cv之后不生效,甚至连获取验证码后的倒计时也不走了...

 代码如下:

// 获取验证码
const getCode = async () => {


  // 节流:如果时间>0就不执行
  if (time.value > 0) return


  time.value = 10
  const res = await getLoginCode(mobile.value, 'login')
  console.log(res, '获取验证码')
  code.value = res.data.code


  // vant自带的表单校验,防止验证码获取后,手机号再次被修改,再次校验不通过就阻止执行
  console.log(formRef.value, 'fromRef')

  formRef.value?.validate('mobile').catch((error) => {
    console.log(error, 'error')
  })

  timeId = setInterval(() => {
    time.value -= 1
    codeText.value = time.value + 's后再次获取'
    if (time.value < 1) {
      codeText.value = '发送验证码'
      return clearInterval(timeId)
    }
  }, 1000)
}

用catch捕捉出来的错误是undefined,也就是validate方法传参的name没有值,检查发现是结构里面没加name属性

 

修改后的代码如下:

 <van-form autocomplete="off" @submit="login" ref="formRef">
      <van-field
        name="mobile"
        v-model="mobile"
        :rules="mobileRules"
        placeholder="请输入手机号"
        type="tel"
      ></van-field>

在需要校验的表单项中加上name属性就可以了

业务代码优化:

const getCode = async () => {


  // 节流:如果时间>0就不执行
  if (time.value > 0) return


  time.value = 10
  const res = await getLoginCode(mobile.value, 'login')
  console.log(res, '获取验证码')
  code.value = res.data.code

  // vant自带的表单校验,防止验证码获取后,手机号再次被修改,再次校验不通过就阻止执行
  // validate的返回值是一个promise,但这里不需要接收返回值,直接加一个await更简单 


  await formRef.value?.validate('mobile')

  timeId = setInterval(() => {
    time.value -= 1
    codeText.value = time.value + 's后再次获取'
    if (time.value < 1) {
      codeText.value = '发送验证码'
      return clearInterval(timeId)
    }
  }, 1000)
}

http://www.lryc.cn/news/16013.html

相关文章:

  • 华为OD机试真题Python实现【子序列长度】真题+解题思路+代码(20222023)
  • 【答疑现场】我一个搞嵌入式的,有必要学习Python吗?
  • MySQL存表报错问题 Incorrect string value
  • SAP ABAP DIALOG长文本编辑框
  • 电子技术——负反馈特性
  • 网站移动端性能优化方法
  • 2023年AI语音会议汇总
  • Mybatis持久层框架 | Mapper加载方式、目录结构解析
  • 九龙证券|创业板向未盈利企业敞开大门 考验投行估值定价能力
  • 「TCG 规范解读」第12章 TPM工作组 TCG身份验证研讨
  • Logstash:在 Logstash 管道中的定制的 Elasticsearch update by query
  • Spring Cloud Kubernetes环境下使用Jasypt
  • Kotlin-面向对象
  • 循环、函数、对象——js基础练习
  • 精确控制 AI 图像生成的破冰方案,ControlNet 和 T2I-Adapter
  • 让师生“不跑腿”,教育数据治理究竟有何魔力
  • 力扣-寻找用户推荐人
  • mmdetection测试阶段
  • 【无标题】10.货币系统
  • 【c++】类和对象6—运算符重载
  • 【SPSS】基础图形的绘制(条形图、折线图、饼图、箱图)详细操作过程
  • 6、Fatfs系统移植
  • 【数据结构与算法】数据结构的基本概念,时间复杂度
  • 【Python】变量类型,赋值+多个变量赋值
  • Qt基础之二十九:图形视图框架(Graphics View Framework)及其应用
  • 电商平台销量查询:2023年1月牛奶乳品热门排行榜
  • 应用层协议
  • Golang调用FFmpeg转换视频流
  • 外卖点餐小程序开发
  • 华为OD机试真题Python实现【猴子爬山】真题+解题思路+代码(20222023)