ElementUI -- 表单嵌套表格,v-for生成的表单项实现表单验证。

一、效果演示

在这里插入图片描述

二、el-form的验证实现

1、在 el-form 上添加规则对象,名称可自定义 :rules=“skuRule”
2、给 el-form-item 添加属性 props=“名称”,需注意的是这个名称需要与规则对象skuRule中的属性名一致,不然验证不了
3、在 data 中定义 skuRule规则。
注意:v-for循环生成的表单项校验大体上与一般校验是一致的,其中最大的差异就在于prop值得显示。因为表单验证的规则和字段是一一对应的,我们v-for出来的字段名又都是一样的,如果不做相应处理,一旦触发验证,那便会牵一发而动全身,如下图所示:
在这里插入图片描述

处理方法:prop的值是以el-form中model绑定的值为起点一层一层往下获取到的,可以先找到验证字段所在的数组,然后获取数组下标,最后定位到prop验证字段,层级间使用"."符号隔开,写法如下:

:prop="'sku_list.' + scope.$index + '.'+'price'"
:rules="skuRule.oprice"

1、界面代码:

 <!-- sku组合可视化显示 -->
<el-form :model="listModel" ref="skuListForm">
    <el-table v-if="skuVisible" :data="listModel.sku_list" border stripe>
        <el-table-column type="index"></el-table-column>
        <el-table-column
            align="center"
            :label="item.sku_name"
            v-for="(item,index) in sku_table"
            :key="index"
            :prop="item.value"
        ></el-table-column>
        <el-table-column label="会员价(元)" align="center">
            <template slot-scope="scope">
                <el-form-item
                    :prop="'sku_list.' + scope.$index + '.'+'price'"
                    :rules="skuRule.price"
                >
                    <el-input
                        style="margin-top:15px"
                        placeholder="请输入"
                        v-model="scope.row.price"
                        @change="getSale(scope.row)"
                        clearable
                    ></el-input>
                </el-form-item>
            </template>
        </el-table-column>
        <el-table-column label="原始价(元)" align="center">
            <template slot-scope="scope">
                <el-form-item
                    :prop="'sku_list.' + scope.$index + '.'+'oprice'"
                    :rules="skuRule.oprice"
                >
                    <el-input
                        style="margin-top:15px"
                        placeholder="请输入"
                        v-model="scope.row.oprice"
                        @change="getSale(scope.row)"
                        clearable
                    ></el-input>
                </el-form-item>
            </template>
        </el-table-column>
        <el-table-column label="库存(件/个)" align="center">
            <template slot-scope="scope">
                <el-form-item
                    :prop="'sku_list.' + scope.$index + '.'+'stock_num'"
                    :rules="skuRule.stock_num"
                >
                    <el-input
                        style="margin-top:15px"
                        placeholder="请输入"
                        v-model="scope.row.stock_num"
                        @change="getStock"
                        clearable
                    ></el-input>
                </el-form-item>
            </template>
        </el-table-column>
        <el-table-column label="sku标题" align="center">
            <template slot-scope="scope">
                <el-form-item
                    :prop="'sku_list.' + scope.$index + '.'+'name'"
                    :rules="skuRule.name"
                >
                    <el-input
                        style="margin-top:15px"
                        placeholder="请输入"
                        v-model="scope.row.name"
                        clearable
                    ></el-input>
                </el-form-item>
            </template>
        </el-table-column>
        <el-table-column label="操作" min-width="150" align="center">
            <template slot-scope="scope">
                <el-button
                    type="danger"
                    size="mini"
                    @click="delData(listModel.sku_list,scope.$index)"
                >删除</el-button>
            </template>
        </el-table-column>
    </el-table>
</el-form>

2、校验规则:

data() {
    return {
        listModel: {
            sku_list: []
        },
        skuRule: {
            oprice: [{ required: true, message: '请输入原始价', trigger: 'blur' }],
            price: [{ required: true, message: '请输入会员价', trigger: 'blur' }],
            stock_num: [{ required: true, message: '请输入商品库存', trigger: 'blur' }],
            name: [{ required: true, message: '请输入sku标题', trigger: 'blur' }]
        },
    };
},
  • 4
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
对于El-Form表单嵌套,你可以使用El-Form-Item组件来实现。在El-Form中,每个表单都需要包裹在El-Form-Item组件中,而El-Form-Item又可以嵌套在另一个El-Form-Item中。 以下是一个示例代码,展示了如何嵌套El-Form表单: ```html <template> <el-form ref="form" :model="form" :rules="rules" label-width="100px"> <el-form-item label="姓名" prop="name"> <el-input v-model="form.name"></el-input> </el-form-item> <el-form-item label="性别"> <el-radio-group v-model="form.gender"> <el-radio label="男"></el-radio> <el-radio label="女"></el-radio> </el-radio-group> </el-form-item> <el-form-item label="教育信息"> <el-form-item label="学校" prop="school"> <el-input v-model="form.school"></el-input> </el-form-item> <el-form-item label="专业" prop="major"> <el-input v-model="form.major"></el-input> </el-form-item> </el-form-item> <el-form-item> <el-button type="primary" @click="submitForm">提交</el-button> </el-form-item> </el-form> </template> <script> export default { data() { return { form: { name: '', gender: '', school: '', major: '' }, rules: { name: [{ required: true, message: '请输入姓名', trigger: 'blur' }], gender: [{ required: true, message: '请选择性别', trigger: 'change' }], school: [{ required: true, message: '请输入学校', trigger: 'blur' }], major: [{ required: true, message: '请输入专业', trigger: 'blur' }] } }; }, methods: { submitForm() { this.$refs.form.validate((valid) => { if (valid) { // 表单验证通过,执行提交操作 console.log('提交表单'); } else { // 表单验证失败,给出提示 console.log('表单验证失败'); return false; } }); } } }; </script> ``` 在上面的示例代码中,El-Form-Item组件可以进行嵌套,例如教育信息部分的学校和专业字段。注意,嵌套El-Form-Item组件也需要设置对应的prop属性和表单验证规则。 希望这个示例对你有所帮助!如果你有任何其他问题,请随时提问。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值