element表单嵌套检验+动态添加

简介: element表单嵌套检验+动态添加

在写表单的时候,容易碰到这种嵌套表单的数据校验,并且这种表单是动态添加的,网上大部分的做法是表单套表单,实际上只需要一个表单就可以了。

为了方便观看,这里只列举了两条数据

多级表单嵌套校验

<el-form
      ref="ruleFormRef"
      :model="ruleForm.FormTable"
      :rules="rules"
      label-width="80px"
      class="demo-ruleForm"
      label-position="left"
      :size="formSize"
      status-icon
      >
            <div class="addFrom">
                <el-button @click="addGoodsInfo"><el-icon><Plus /></el-icon>添加</el-button>
                 <div class="addFrom_box" v-for="(item,index) in ruleForm.FormTable.goodsDetail" :key="index">
                    <!-- 嵌套检验 -->
                    <el-form-item label="商品编号" 
                    :prop="`goodsDetail.`+index+`.name`"
                    :rules="[{ required: true, message: '请输入商品编号', trigger: 'blur' }]"
                    >
                    <el-form-item label="商品数量" 
                    :prop="`goodsDetail.`+index+`.goodsNum`"  
                    :rules="[{ required: true, message: '请输入商品数量', trigger: 'blur' }]">
                    <el-input-number :min="1" :max="10" v-model="item.goodsNum" placeholder="请输入" />
                    </el-form-item>
                    <el-input clearable v-model="item.name" placeholder="请输入商品编号" />
                    </el-form-item>
                 </div>
            </div>
  </el-form>

数据

// 为了演示嵌套校验,这里将列表数据嵌套在对象内部
const ruleForm = reactive({
    FormTable:{
        name: 'fanction',
        // 嵌套的列表数据
        goodsDetail : [
            {id:null,name:null,goodsNum:null,store:null}
        ]
    }
})

此处的数据里是一个对象内套了一个数组对象,正常情况下,校验是通过propmodule里面的数据进行校验,但此处是数组,数据在数组内部,所以用一般的prop指定数据名是校验不了的,这里用的是

:prop=“goodsDetail.+index+.name

只需要在prop中指定到当前数据在module里的位置即可。此处的goodsDetail就是v-forruleForm.FormTable.goodsDetail的最后面一位,向下寻找,goodsDetail[index].name就是当前的数据,只不过这里改成了xxx.xxx.xxx的链式写法。

校验规则写在el-form-item上面:

:rules=“[{ required: true, message: ‘请输入商品编号’, trigger: ‘blur’ }]”

动态添加,只需要给数组末尾添加一个空对象即可。

// 添加按钮
const addGoodsInfo = () => {
    ruleForm.FormTable.goodsDetail.push({id:null,name:null,goodsNum:null,store:null})

动态删除,给当前条添加一个点击事件,找到当前条删除。

// 删除按钮
const deleteGodos = (index : number) => {
   console.log(index);
   ruleForm.FormTable.goodsDetail.splice(index,1)
}
目录
相关文章
|
8月前
|
JavaScript
jq样式、元素操作,效果,筛选方法与转换,事件对象
jq样式、元素操作,效果,筛选方法与转换,事件对象
|
5月前
|
JavaScript
原生JS修改html内容不影响绑定的点击事件 请认准insertAdjacentHTML、insertAdjacentText方法
原生JS修改html内容不影响绑定的点击事件 请认准insertAdjacentHTML、insertAdjacentText方法
原生JS修改html内容不影响绑定的点击事件 请认准insertAdjacentHTML、insertAdjacentText方法
|
23天前
element-ui中Form表单使用自定义验证规则
element-ui中Form表单使用自定义验证规则
10 0
|
2月前
|
JSON 数据格式
element ui实现多层级复杂表单的操作(添加与回显)之添加功能实现
element ui实现多层级复杂表单的操作(添加与回显)之添加功能实现
13 0
|
7月前
|
JavaScript
Element-Ui表单移除校验clearValidate和resetFields
添加和修改公用一个弹窗,点击添加弹窗后,如果没移除表单校验的话,再点击修改弹窗时校验就会被记住,所以需要移除校验,但在清空表单校验时会报如下错误: 那么,你只需要加上这段话即可 this.$nextTick(()=&gt;{ this.$refs.addArray.resetFields(); }) 再此,我顺便说一下resetFields和clearValidate的区别: this.$refs.form.resetFields(); //移除表单校验并初始化表单,一般用于.
151 0
Element-Ui表单移除校验clearValidate和resetFields
|
9月前
element表单组件的trigger表单验证逻辑规则
校验元素trigger属性值应该怎么选择?
214 0
|
9月前
form表单的entype属性选取
enctype属性取值:enctype默认为application/x-www-form-urlencoded,只能上传纯文本格式的文件。
50 0
|
10月前
element Plus 表格嵌套其他组件的使用
element Plus 表格嵌套其他组件的使用
105 0
Element-ui 中对表单(Form)绑定的对象中的对象属性进行校验
Element-ui 中对表单(Form)绑定的对象中的对象属性进行校验
951 0
|
11月前
|
JavaScript Java 关系型数据库
Element表格和表单字典转换(静态和动态)(上)
Element表格和表单字典转换(静态和动态)(上)
302 0