上一篇
想象一下:用户小王正在注册新账号,填完所有信息后点击提交,页面却突然弹出「密码不一致」的提示,更尴尬的是,邮箱格式错误、手机号漏写位数这些低级错误,居然要等提交后才知道!😱
作为开发者,我们如何让表单变得「聪明」起来?今天带你深入Vue 3的表单验证世界,从必填项判断到异步校验,手把手教你打造丝滑的表单体验!
// 使用VeeValidate的声明式规则 const rules = { username: [{ required: true, message: '用户名不能为空' }], email: [ { required: true, message: '邮箱必填' }, { type: 'email', message: '格式错误' } ] }
<el-form :model="form" :rules="rules" ref="formRef"> <el-form-item label="用户名" prop="username"> el-input v-model="form.username" /> <span v-if="errors.username">{{ errors.username }}</span> </el-form-item> </el-form>
const submitForm = async () => { const isValid = await formRef.value.validate() if (!isValid) return alert('请修正错误') // 真正提交逻辑... }
// 使用Yup schema const schema = yup.object({ password: yup.string().required(), confirmPassword: yup.string() .required() .oneOf([yup.ref('password')], '两次密码不一致') })
<FieldArray name="items" v-slot="{ fields, push }"> <div v-for="(item, idx) in fields" :key="idx"> <Field :name="`items[${idx}].name`" rules="required" /> <button @click="push({ name: '' })">添加商品</button> </div> </FieldArray>
const schema = yup.object({ username: yup.string() .required() .test('unique', '用户名已存在', async (value) => { const res = await axios.get(`/api/check/${value}`) return !res.data.exists }) })
// 在VeeValidate配置中添加 configure({ debounce: { input: 300, // 输入框300ms防抖 blur: 100 // 失焦100ms后验证 } })
// 当选择「企业用户」时必填公司名称 const conditionalRequired = (predicate) => ({ validate: (value) => !predicate() || !!value, message: '该字段必填' })
// 中文配置示例 configure({ generateMessage: localize('zh_CN', { messages: { required: '必填项不能为空', email: '邮箱格式不正确' } }) })
Q:输入后未触发验证怎么办?
A:检查validateOnInput
配置,或手动调用validate()
方法。
Q:如何集成Element Plus组件?
A:通过v-slot
暴露字段状态:
<Field name="email" v-slot="{ field, errors }"> <el-input v-bind="field" :error-message="errors[0]" /> </Field>
Q:多个表单共存如何处理?
A:为每个表单单独创建useForm
实例,或使用命名空间隔离状态。
通过本文,相信你已经掌握了Vue表单验证的核心技巧,现在就去给你的项目加上智能校验,让用户告别「提交-等待-报错」的痛苦循环吧!🚀
本文由 业务大全 于2025-08-26发表在【云服务器提供商】,文中图片由(业务大全)上传,本平台仅提供信息存储服务;作者观点、意见不代表本站立场,如有侵权,请联系我们删除;若有图片侵权,请您准备原始证明材料和公证书后联系我方删除!
本文链接:https://cloud.7tqx.com/wenda/738860.html
发表评论