美文网首页
表单校验

表单校验

作者: Jycoding | 来源:发表于2022-05-01 23:38 被阅读0次

文档:https://vee-validate.logaretm.com/v4/ 支持vue3.0

第一步:安装

执行命令 npm i vee-validate@4.0.3

第二步:导入

修改文件 src/views/login/index.vue

import { Form, Field } from 'vee-validate'

第三步:定义校验规则

新建文件 src/utils/vee-validate-schema.js

// 定义校验规则提供给vee-validate组件使用

export default {

  // 校验account

  account (value) {

    // value是将来使用该规则的表单元素的值

    // 1. 必填

    // 2. 6-20个字符,需要以字母开头

    // 如何反馈校验成功还是失败,返回true才是成功,其他情况失败,返回失败原因。

    if (!value) return '请输入用户名'

    if (!/^[a-zA-Z]\w{5,19}$/.test(value)) return '字母开头且6-20个字符'

    return true

  },

  password (value) {

    if (!value) return '请输入密码'

    if (!/^\w{6,24}$/.test(value)) return '密码是6-24个字符'

    return true

  },

  mobile (value) {

    if (!value) return '请输入手机号'

    if (!/^1[3-9]\d{9}$/.test(value)) return '手机号格式错误'

    return true

  },

  code (value) {

    if (!value) return '请输入验证码'

    if (!/^\d{6}$/.test(value)) return '验证码是6个数字'

    return true

  },

  isAgree (value) {

    if (!value) return '请勾选同意用户协议'

    return true

  }

}

提取目的 这些校验规则将来在其他表单验证时候可复用

第三步:使用 Form 组件,使用 vee-validate-schema 校验规则

修改文件 src/views/login/index.vue

-<div class="form">...</div>

+<Form class="form" :validation-schema="schema" autocomplete="off">...</Form>

import veeSchema from '@/utils/vee-validate-schema'

  setup () {

    // 控制短信登录切换的

    const isMsgLogin = ref(false)

    // 表单对象数据

    const form = reactive({

      isAgree: true,

      account: null,

      password: null,

      mobile: null,

      code: null

    })

    // 校验规则对象

    const mySchema = {

      account: schema.account,

      password: schema.password,

      mobile: schema.mobile,

      code: schema.code,

      isAgree: schema.isAgree

    }

    return { isMsgLogin, form, scheam:mySchema, submit }

}

第四步:使用 Field 组件,添加表单项目校验

修改文件 src/views/login/index.vue

          <div class="form-item">

            <div class="input">

              <i class="iconfont icon-user"></i>

+              <Field :class="{error:errors.mobile}" v-model="form.mobile" name="mobile" type="text" placeholder="请输入手机号" />

            </div>

+            <div class="error" v-if="errors.mobile"><i class="iconfont icon-warning" />{{errors.mobile}}</div>

          </div>

          <div class="form-item" v-if="!isMsgLogin">

            <div class="input">

              <i class="iconfont icon-lock"></i>

+              <Field :class="{error:errors.password}" v-model="form.password" name="password" type="password" placeholder="请输入密码" />

            </div>

+            <div class="error" v-if="errors.password"><i class="iconfont icon-warning" />{{errors.password}}</div>

          </div>

          <div class="form-item" v-else>

            <div class="input">

              <i class="iconfont icon-code"></i>

+              <Field :class="{error:errors.code}" v-model="form.code" name="code" type="password" placeholder="请输入验证码" />

              <span class="code">发送验证码</span>

            </div>

+            <div class="error" v-if="errors.code"><i class="iconfont icon-warning" />{{errors.code}}</div>

          </div>

<Form class="form" :validation-schema="schema" v-slot="{errors}"

其实就是把input改成 Field 组件,默认解析成input

Field 添加name属性,作用是指定使用schema中哪个校验规则

Form 添加 v-slot="{errors}" 使用作用域插槽暴露 errors 错误对象

通过 errors['校验规则名称'] 取出错误信息,有则显示,无即隐藏

第五步:如何校验 自定义组件 XtxCheckbox

修改文件 src/views/login/index.vue

-<XtxCheckbox v-model="form.isAgree" />

+<Field as="XtxCheckbox" name="isAgree" v-model="form.isAgree"/>

Field 的 as 属性可以指定为其他标签,也可指定为组件。

但是组件需要支持 v-model 否则校验不会触发。

第六步:如何在切换 短信 与 账户 登录时候清空表单和校验结果

修改文件 src/views/login/index.vue

<Form ref="formCom" class="form" :validation-schema="schema" v-slot="{errors}"

    // 切换表单元素,还原数据和清除校验效果

    const formCom = ref(null)

    watch(isMsgLogin, () => {

      // 还原数据

      form.isAgree = true

      form.account = null

      form.password = null

      form.mobile = null

      form.code = null

      // 补充校验效果清除,Form组件提供resetForm()

      formCom.value.resetForm()

    })

首先需要自己手动清除数据,然后使用Form 组件提供 resetForm 方法对表单进行清除校验结果

第七步:如何整体表单校验

修改文件 src/views/login/index.vue

<a @click="login()" href="javascript:;" class="btn">登 录</a>

    // 需要在点击登录的时候对整体表单进行校验

    const login = async () => {

      // Form组件提供了一个 validate 函数作为整体表单校验,当是返回的是一个promise

      const valid = await formCom.value.validate()

      console.log(valid)

    }

    return { isMsgLogin, form, schema: mySchema, formCom, login }

Form 组件提供 validate 方法对表单进行整体校验

相关文章

网友评论

      本文标题:表单校验

      本文链接:https://www.haomeiwen.com/subject/sqcbyrtx.html