vue3+element plus动态表单验证

要做的效果类似于下面这样:

表单项可以动态的添加和删除,并且表单与校验一一对应

其实就是官方这个例子:

https://element-plus.org/zh-CN/component/form.html

但是当时懵懵的试了好一会才写出来的,记录一下。

<template>
    <div style="width: 1000px;margin: 0 auto;">
     <el-row>
      <el-col :span="2">姓名和班级</el-col>
     <el-col :span="22">
        <el-form :model="studentInfos">
          <el-row v-for="(item, index) in studentInfos.items" :key="index" align="top" style="margin-bottom: 20px;">
                            <el-col :span="10">
                                <el-form-item
                                    :prop="'items.' + index + '.name'"
                                    :rules="{ required: true, message: '请输入姓名', trigger: 'blur' }"
                                    ><el-input
                                        v-model="item.name"
                                        placeholder="请输入姓名"
                                        type="text"
                                        maxlength="4"
                                        show-word-limit
                                /></el-form-item>
                            </el-col>
                            <el-col :span="10" :offset="1">
                                <el-form-item
                                    :prop="'items.' + index + '.class'"
                                    :rules="[
                                        { required: true, message: '请填写班级', trigger: 'blur' },
                                    ]"
                                    ><el-input v-model="item.class" placeholder="请填写班级"
                                /></el-form-item>
                            </el-col>
                            <el-col :span="2" :offset="1">
                                <el-icon>
                                    <Plus v-if="index == 0" @click="addnameItem" />
                                    <Remove v-else @click="deletenameItem(item)" />
                                </el-icon>
                            </el-col>
        </el-row>
        </el-form>
     </el-col>
     </el-row>
    </div>

</template>
<script setup lang="ts">
import { Plus, Remove } from '@element-plus/icons-vue';
import { reactive } from 'vue';
let studentInfos = reactive({
    items: [
        {
            key:'1',
            name: '',
            class: ''
        }
    ]
});
const addnameItem = () => {
  studentInfos.items.push({
        key: Date.now().toString(),
        name: '',
        class: ''
    });
};
const deletenameItem = (item:any) => {
    const index = studentInfos.items.indexOf(item);
    if (index !== -1) {
        studentInfos.items.splice(index, 1);
    }
};
</script>

 主要注意点在表单数据的结构,还有在循环中,表单prop属性的书写。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值