el-form数组校验

 以vue3为例,这个是真简单

<el-form ref="conditionListRef" :model="conditionList">
    <template v-for="(item, index) in conditionList" :key="index">
        <el-form-item
            :prop="`[${index}].var`"
            :rules="[{ required: true, message: '请输入', trigger: 'blur' }]"
        >
            组件
        </el-form-item>
        <el-form-item
            :prop="`[${index}].op`"
            :rules="[{ required: true, message: '请输入', trigger: 'blur' }]"
        >
            组件
        </el-form-item>
        <el-form-item
            :prop="`[${index}].value`"
            :rules="[{ required: true, message: '请输入', trigger: 'blur' }]"
        >
            组件
        </el-form-item>
    </template>
    <template #footer >
        <el-button type="primary" @click="toSave">保存</el-button>
    </template>
</el-form>
const conditionListRef = ref()
const conditionList = ref([
    {
        var:'',
        op:'',
        value:''
    },
    {
        var:'',
        op:'',
        value:''
    }
])
const toSave = () => {
    conditionListRef.value.validate(valid => {
        if (valid) {
        }
    })
}

举一反三,如果是对象里面的数组(form.userList),各位看官应该也能解决吧

### Vue3 中 `el-form` 对数组嵌套数组的表单验证 在处理复杂的表单结构时,特别是当涉及到多级嵌套的对象或数组时,确保每一层都能被正确地校验是非常重要的。对于 `el-form` 组件来说,通过合理配置可以实现对复杂数据模型的有效验证。 #### 定义响应式数据模型 为了支持多层次的数据结构,定义一个包含多个层次的响应式对象是必要的。这里展示了一个具有两层列表结构的例子: ```javascript import { ref, reactive } from 'vue'; let formObj = reactive({ outerList: [ { innerList: [ { name: '', desc: '' } ] } ], }); ``` 这段代码创建了一个名为 `outerList` 的外层数组,其中每个元素又包含了另一个称为 `innerList` 的内层数组[^1]。 #### 动态生成表单项 利用 `v-for` 指令遍历这些数组,并为每一个项分配唯一的 `prop` 属性以便于后续的校验操作。注意要给每层循环提供不同的键名以区分不同级别的字段路径: ```html <template> <el-form :model="formObj" :rules="rules"> <!-- 外层循环 --> <div v-for="(itemOuter, indexOuter) in formObj.outerList" :key="indexOuter"> <h4>Item {{ indexOuter + 1 }}</h4> <!-- 内层循环 --> <div v-for="(itemInner, indexInner) in itemOuter.innerList" :key="`${indexOuter}-${indexInner}`"> <el-form-item :label="'Name'" :prop="`outerList.${indexOuter}.innerList.${indexInner}.name`" :rules="rules.nameRule"> <el-input v-model="itemInner.name"></el-input> </el-form-item> <el-form-item :label="'Description'" :prop="`outerList.${indexOuter}.innerList.${indexInner}.desc`" :rules="rules.descRule"> <el-input type="textarea" v-model="itemInner.desc"></el-input> </el-form-item> </div> <!-- 添加新内部条目按钮 --> <button @click.prevent="addItem(indexOuter)">Add Item</button> </div> <!-- 提交按钮 --> <el-button type="primary" native-type="submit">Submit</el-button> </el-form> </template> ``` 上述模板展示了如何构建一个多层级的表单界面,其中包括两个层面的迭代以及相应的输入控件。重要的是要注意到 `prop` 属性是如何按照特定模式指定的,这使得即使是在深层嵌套的情况下也能准确定位到具体的字段位置进行校验[^2]。 #### 设置校验规则 接下来就是设定适用于各个字段的具体校验逻辑了。可以通过向 `el-form` 的 `rules` 属性传递一个对象来完成这项工作。该对象应该映射至之前提到过的那些完整的属性路径上: ```javascript const rules = reactive({ nameRule: [{ required: true, message: 'Please input the name', trigger: 'blur' }], descRule: [{ required: false, max: 200, message: 'Max length is 200 characters', trigger: 'blur' }] }) ``` 这样就完成了整个流程的设计——从初始化数据结构到最后实施严格的前端校验机制[^3]。 #### 实现增删功能 考虑到实际应用中可能需要动态调整内外部项目的数量,因此还需要编写一些辅助函数用于管理集合的变化: ```javascript function addItem(outerIndex){ const newItem = { name:'', desc:'' }; formObj.outerList[outerIndex].innerList.push(newItem); } // 删除某一层中的某个子项 function removeItem(outerIndex, innerIndex){ formObj.outerList[outerIndex].innerList.splice(innerIndex, 1); } ``` 以上方法允许用户交互式地修改表单的内容而不影响整体布局和样式[^4]。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值