vee-validate文档地址:https://vee-validate.logaretm.com/v4/
用vee-validate做表单校验
先安装vee-validate包
导入组件
//导入组件import { Form , Field } from 'vee-validate'//在components中定义components:{Form , Field}//Form就是表单,Field就是表单项
在组件中使用
<!--ref: 引用;用于手动兜底校验validation-schema: 用来指定校验规则(这里的规则)v-slot: 作用域插槽,如果校验失败,errors中会保存校验失败的结果--><Form ref="target" :validation-schema="rules" v-slot="{errors}"><!-- 省略其他 ... --><!-- Field:v-model:双向绑定数据项name:指定要校验的字段:class="{error:errors.mobile}" 如果校验失败,就补充error类动态绑定class用来约定错误发生时的样子 --><Fieldv-model="formData.mobile"type="text"name="mobile"placeholder="请输入手机号":class="{error:errors.mobile}"/><!-- 约定显示校验错误结果 --><div class="error" v-if="errors.mobile">{{errors.mobile}}</div><!-- 省略其他 ... --></Form>
定义校验规则
//规则定义在一个js文件中,需要先导入import { code, mobile } from '@/utils/validate'//定义表单数据项const formData = reactive({mobile: '',code: ''})// 校验规则const rules = {mobile: mobile,code: code}//导出规则return {formData,rules}
规则
// @/utils/validate.js 文件中的规则export const mobile = (value) => {if (!value) return '请输入手机号'if (!/^1[3-9]\d{9}$/.test(value)) return '手机号格式错误'return true}export const code = (value) => {if (!value) return '请输入手机验证码'if (!/\d{6}$/.test(value)) return '手机验证码格式错误'return true}
手动兜底校验
const target = ref(null) // 定义引用属性 <Form ref="target">const checkForm = () => {// Form 组件提供了一个 validate 函数作为整体表单校验,返回的是一个promisetarget.value.validate().then((res) => {console.log('表单校验结果', res)})}//不要忘记 return { target } 导出//不要忘记 return { target } 导出//不要忘记 return { target } 导出
拓展-联合第三方组件使用
<XtxCheckbox v-model="form.isAgree" /><Field as="XtxCheckbox" name="isAgree" v-model="form.isAgree"/>
