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用来约定错误发生时的样子 -->
<Field
v-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 函数作为整体表单校验,返回的是一个promise
target.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"/>