问题描述

点击发送验证码后,为了让逻辑更加严谨,使用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=”loginref=”formRef”>
      <van-field
        name=”mobile
        vmodel=”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)
}

原文地址:https://blog.csdn.net/weixin_48082900/article/details/129160856

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任

如若转载,请注明出处:http://www.7code.cn/show_33638.html

如若内容造成侵权/违法违规/事实不符,请联系代码007邮箱suwngjj01@126.com进行投诉反馈,一经查实,立即删除

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注