ElementUI的的动态增减表单及表单验证

ElementUI的的动态增减表单

1、根据需求:做一个如下图的表单,当只有一列时,无法进行删除操作,且表单必须校验

在这里插入图片描述
2、根据ElementUI动态增减表单项,可得知

  • 通过v-for循环可动态增减表单
  • 通过:prop="'domains.' + index + '.value'"可进行验证

3、data里的写法

data(){
return {
		ruleformPro: {
        list: [
          {
            fbxBoxNoPro: "",
            boxNumberPro: "",
          },
        ],
      },
}

4、表单代码

<el-form label-position="left"  class="demo-dynamic"  size="mini" :model="ruleformPro"  ref="ruleformPro">
  <el-row :gutter="20" v-for="(item, index) of ruleformPro.list" :key="index">
   <el-col :span="11">
       <el-form-item
            class="rules"
             label-width="100px"
             label="FBA PRO号"
             :prop="'list.' + index + '.fbxBoxNoPro'"
             :rules="{
             required: true,
             message: 'FBA PRO号不能为空',
              trigger: 'change',}" >
        <el-input  maxlength="12" type="text" :placeholder="请输入12位FBA PRO号" v-model="item.fbxBoxNoPro" size="mini">  <el-button slot="suffix" @click="(imageNum = 1), (imagesType = true)"  type="text"  >示例图</el-button >
        </el-input>
      </el-form-item> 
    </el-col>
  <el-col :span="8">
       <el-form-item
           label-width="50px"
           class="rules"
           label="箱数"
           style="margin-left: 20px"
           :prop="'list.' + index + '.boxNumberPro'"
             :rules="{
              required: true,
              message: '箱数不能为空',
              trigger: 'change',}" >
   <el-input
      style="width: 140px"
      size="mini"
      :min="0"
      :max="999"
      onkeyup="value=value.replace(/^(0+)|[^\d]+/g,'')"
      v-model="item.boxNumberPro"
      placeholder="请输入箱子数量"
      >
      </el-input>
    </el-form-item>
   </el-col>
       <el-button
           size="mini"
           type="text"
           style="border-radius: 2px; color: #b93947"
           @click="handleAdd(index)"
           v-if="ruleformPro.list.length == index + 1">
           <i class="el-icon-circle-plus-outline"></i >&nbsp;添加PRO</el-button>
       <el-button
           style="margin-top: 2px"
           v-if="ruleformPro.list.length != 1"
           type="text"
           class="deleteBox"
           @click="handleDel(index)">
           <i class="el-icon-delete"></i>&nbsp;删除</el-button>
       </el-row>
	</el-form>

5、动态增减

  methods: {
		handleAdd(index) {
         this.ruleformPro.list.push({
             fbxBoxNoPro: "",
             boxNumberPro: "",
      });
    },
    handleDel(index) {
      this.ruleformPro.list.splice(index, 1);
    },
}

动态表单校验

1、在下述动态增减表单中,我们通过v-forprop="'domains.' + index + '.value'"的方法进行了一种校验
2、多个表单校验

submitFormOrder() {
     let File = false;
     try {
       this.$refs["ruleformPro"].validate((valid) => {
         if (valid) {
           File = true;
         } else {
           throw false;
         }
       });
       this.$refs["refFormInline"].validate((valid) => {
         if (valid) {
           File = true;
         } else {
           throw false;
         }
       });
     } catch (err) {
       File = false;
     }
     if (File) {
       this.onToNext();//调下一个接口
     }
   },

3、判断类型表单校验
:rules="this.THFdata.checked==false?formRules.inwarehousetime:{}"

4、如果要进行比较复杂的校验,再行内无法完成,可以给rules一个属性名,然后去data里校验
例:
在这里插入图片描述
data里的校验
在这里插入图片描述

还有方法的表单校验,欢迎补充

<think>好的,用户想了解如何在ElementUI中实现动态增删表单项的功能,需要示例代码。首先,我需要回忆一下ElementUI的相关组件和文档。ElementUI表单组件支持动态增减,通常结合v-for指令和数组操作来实现。 用户的问题涉及到动态表单的增删以及校验。根据之前的知识,动态表单的关键在于使用v-for循环渲染表单项,每个表单项绑定到数组的一个元素。添加表单项时,向数组添加新元素;删除时,则从数组中移除对应元素。校验部分需要注意每个表单项的prop属性需要动态绑定,比如使用类似:prop="'domains.' + index + '.value'"的形式,确保校验规则正确应用。 接下来,我需要整理一个简单的示例代码。首先,在Vue组件中定义表单数据,通常是一个数组,每个元素代表一个表单项。然后,在模板中使用el-form包裹,内部用v-for循环生成多个el-form-item。每个表单项旁边放置删除按钮,点击时触发删除方法。添加按钮则通过push新元素到数组来实现。 校验方面,需要在el-form上定义rules规则,并且每个el-form-item的prop需要动态设置,以匹配数组的索引和字段名。例如,对于数组domains中的每个元素,prop应该是domains.${index}.value这样的结构,这样ElementUI的校验系统才能正确识别。 另外,要注意表单的整体校验,比如提交时调用validate方法。需要确保动态添加的表单字段在rules中有对应的校验规则,可能使用嵌套的规则定义。 现在需要考虑用户可能的疑问点,比如如何绑定校验规则、如何处理数组索引的变化等。可能需要提醒用户,删除表单项时,如果使用splice方法,Vue的响应式系统会自动更新视图,但需要注意索引的正确处理。 最后,确保示例代码简洁,并包含关键注释,帮助用户理解每一步的作用。同时,提供相关的参考引用,指向之前提到的文档内容,增强答案的可信度。</think>以下是在Element UI中实现动态增删表单项的详细示例和说明: ### 实现步骤 #### 1. 表单数据结构定义 使用数组存储动态表单项,每个元素为对象类型: ```javascript data() { return { form: { domains: [{ value: '' }] // 初始包含一个空表单项 }, rules: { domains: [{ required: true, message: '内容不能为空', trigger: 'blur' }] } } } ``` #### 2. 模板结构 ```html <el-form :model="form" :rules="rules" ref="dynamicForm"> <el-form-item v-for="(domain, index) in form.domains" :key="index" :label="'项目' + (index + 1)" :prop="'domains.' + index + '.value'" > <el-input v-model="domain.value"></el-input> <el-button @click.prevent="removeDomain(index)">删除</el-button> </el-form-item> <el-button @click="addDomain">新增项目</el-button> <el-button type="primary" @click="submitForm">提交</el-button> </el-form> ``` #### 3. 方法实现 ```javascript methods: { addDomain() { this.form.domains.push({ value: '' }); // 添加新表单项 }, removeDomain(index) { this.form.domains.splice(index, 1); // 移除指定索引项 }, submitForm() { this.$refs.dynamicForm.validate(valid => { if (valid) { // 处理提交逻辑 } }); } } ``` ### 关键点解析 1. **动态绑定校验**:通过`:prop="'domains.' + index + '.value'"`实现动态表单项校验,索引值必须与数组位置对应[^2] 2. **响应式更新**:使用数组的push/splice方法操作domains数组,Vue会自动触发视图更新 3. **表单校验配置**:rules中的校验规则需要对应数组元素的字段结构
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值