Vue 动态表单验证

核心操作:FormItem 的 :prop 需要与控件的 v-model 有一致的路径。

由于验证完成后需要判断值是否为空,那这个时候需要有个地方可以映射到这个值,此时:prop这个这个值对应的就是key

在固定表单需求中,通过指定 :prop,:rules 即可等到验证功能,但是对于动态生成的表单,业务逻辑来说,也就是需要动态生成 :prop 与 :rules。比如说:

<Form :model="formItem" :rules="rules">
    <FormItem :prop="path1.path2.path3">
    </FormItem>
</Form>

验证的写法

rules : {
    //一定要与 prop 值一致
    "path1.path2.path3" : [{required: true, message: 'xx不能为空', trigger: 'blur'}]
},
//这里的路径也是需要一致的,porp中的 点会分解调用的 formItem 里面的对象
formItem : {
    path1 : {
        path2 : {path3 : ""}
    }
}

以上的写法固定表单需求是可以触发验证的,但是如何需要动态增减表单对象以及验证规则,则需要编写 validator,手动验证。

源码分析

为什么 rules 中的 "path1.path2.path3" 可以映射到 formItem中的对象。可以打开 form-item.vue 文件

在这里插入图片描述
也就是如果你是动态生产的表单,只需要按照这种规范生产rules以及在formItem里面存在相同路径的都是可以调用验证

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Vue动态表单验证可以通过使用Vue的指令和计算属性来实现。以下是一个简单的示例: 1. 首先,我们需要定义一个包含表单字段的数据对象,并设置验证规则: ``` data() { return { formData: { name: '', email: '', password: '', confirmPassword: '' }, rules: { name: [ { required: true, message: '请输入姓名', trigger: 'blur' } ], email: [ { required: true, message: '请输入邮箱', trigger: 'blur' }, { type: 'email', message: '请输入正确的邮箱格式', trigger: ['blur', 'change'] } ], password: [ { required: true, message: '请输入密码', trigger: 'blur' }, { min: 6, message: '密码长度不能小于6位', trigger: 'blur' } ], confirmPassword: [ { required: true, message: '请再次输入密码', trigger: 'blur' }, { validator: this.validateConfirmPassword, trigger: 'blur' } ] } } }, ``` 2. 接下来,我们需要在模板使用Vue指令来绑定表单字段和验证规则: ``` <el-form ref="form" :model="formData" :rules="rules"> <el-form-item label="姓名" prop="name"> <el-input v-model="formData.name"></el-input> </el-form-item> <el-form-item label="邮箱" prop="email"> <el-input v-model="formData.email"></el-input> </el-form-item> <el-form-item label="密码" prop="password"> <el-input type="password" v-model="formData.password"></el-input> </el-form-item> <el-form-item label="确认密码" prop="confirmPassword"> <el-input type="password" v-model="formData.confirmPassword"></el-input> </el-form-item> </el-form> ``` 3. 最后,我们需要定义验证函数,并将其作为验证规则的一部分: ``` methods: { validateConfirmPassword(rule, value, callback) { if (value !== this.formData.password) { callback(new Error('两次输入的密码不一致')) } else { callback() } } } ``` 通过这种方式,我们可以轻松地实现动态表单验证,并在用户输入时进行实时验证。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值