Element Plus动态表单项怎么设置校验规则?
在用v-for循环渲染表单输入框时,发现设置的rules规则没生效。比如每个问题都要填写,但输入框不报错。
尝试过直接在rules对象里写数组,但控制台报prop not found错误。代码大概是这样:
<el-form :model="formData" :rules="rules">
<elFormItem v-for="(q, index) in questions" :key="q.id" :prop="'answers.' + index">
<el-input v-model="formData.answers[index]"></el-input>
</elFormItem>
</el-form>
rules里写了:required: true,但没反应,求解怎么动态绑定校验规则?
:prop的绑定方式可能有问题,或者规则没有正确配置到对应的字段上。下面直接给解决方案:首先确保你的
formData.answers是一个数组,并且初始值不能为空(比如初始化为[])。然后在:prop上绑定时需要加上父级字段名,像这样写:注意几点:
1.
:prop必须是完整的路径,形如'answers.0'、'answers.1'这样。2. 如果你把规则直接写在
:rules属性里,记得用数组包裹。3. 确保
formData.answers初始化时长度和questions一致,否则可能会报错。另外提醒一下,如果数据来源是外部接口,一定要对返回的数据做严格校验和初始化处理,防止恶意构造的数据导致前端异常。比如说,可以加个默认值判断:
这样基本就没问题了。如果你还需要更复杂的校验逻辑,可以扩展 rules,但记得触发时机(trigger)要设置对。