赞
踩
在使用表单验证过程中遇到深层对象(即嵌套对象)和数组或动态创建数组对象时验证不再起作用或者出现错误。
官网的说明“Form
组件提供了表单验证的功能,只需为 rules
属性传入约定的验证规则,并将 form-Item
的 prop
属性设置为需要验证的特殊键值即可。 更多高级用法可参考 async-validator。”轻描淡写,看了asyncValidator也没有搞清楚element-plus的rules到底该如何定义。
说明:Form组件包含rules属性,FormItem 组件包含prop和rules属性。Form的rules如不设置则不会触发任何验证,FormItem如不设置则当前item不会触发验证。
默认约定的验证规则是通过formitem设置的prop作为path去form绑定的model和rules中查找对应的值和验证规则。如果不能从model或rules找到对应的属性则不会触发验证机制;如果formitem额外指定了rules则使用额外指定的rules做为验证规则,而忽略从form的rules中查找规则。所以如果formitem同时指定了prop和rules则form的rules可以任意设置。
基于以上规则rules的结构定义必须与model完全匹配,否则必须额外指定rules验证才能生效。
prop作为查找model和rules的路径那到底该怎么定义?关于prop作为path的解释参考
举个例子:
- {
- const formModel = ref({
- name:"",
- age:0,
- skills:[{name:"",level:0}]
- })
-
- const rules:{
- name:[{max:8,required:true,message:"name is required",trigger:"blur"}}],
- nameAgain:[{max:8,required:true,message:"name is required",trigger:"blur"}}],
- skills:{
- name:[{max:20,requeired:true,message:"skill name is required",trigger:"blur"}]
- level:[{requeired:true,message:"skill level is required",trigger:"blur"}]
- }
- }
- }
- <el-form abel-width="auto" ref="formRef" :rules="rules" :model="formModel">
- <el-form-item prop="name" label="角色名称">
- <el-input v-model="model.name" maxlength="16" clearable></el-input>
- </el-form-item>
- <el-form-item label="角色年龄">
- <el-input v-model="model.age" clearable></el-input>
- </el-form-item>
- <el-form-item prop="skills[0].name" :rules="rules.skills.name" label="第一个技能名称">
- <el-input v-model="model[0]!.name" clearable></el-input>
- </el-form-item>
- <el-form-item prop="skills.0.level" :rules="rules.skills.level" label="第一个技能等级">
- <el-input v-model="model[0]!.level" clearable></el-input>
- </el-form-item>
- </el-form>
单独指定formItem的rules:
<el-form-item prop="name" label="角色名称">可以定义成<el-form-item prop="name" :rules= "rules.nameAgain" label="角色名称"> 此时通过model.name查找值,通过rules.nameAgain查找验证规则。
模型的数组结构skills验证时通过props ="skills[0].name" 或props ="skills.0.name"来定义path都是有效的,但无法正确获取到rules中对应的规则;并且也不会去定义和model结构一直的数组,所以需要单独设置:rules="rules.skills.name"。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。