Vue中动态增加表单项的方法

  <!-- 需求 
  1 根据点击添加 生成表格数据 
  2 动态添加 表单
  -->

在这里插入图片描述
点击添加生成对应动态表单

在这里插入图片描述

HTML

<template>
    <div>
      <a-form-model ref="ruleForm" :model="form" :rules="rules">
                  <a-form-model-item prop="contractNo" label="编号" style="display:flex;">
                      <a-input  v-model="form.contractNo"  :max-length="15" placeholder="请输入" />
                  </a-form-model-item>
                  <!-- 动态 -->
                  <div v-for="(item,index) in form.addArr" :key="index" style="border: 1px solid;">
                    <a-form-model-item :prop="'addArr.'+index+'.phone'" :label="`手机号${index+1}`"  :rules="{required: true, message:`请输入手机号`,trigger:'blur'}" style="display:flex;">
                      <a-input v-model="form.addArr[index].phone"  :max-length="15" placeholder="请输入" />
                  </a-form-model-item>
                  
                  <a-form-model-item  :prop="'addArr.'+index+'.status'" label="状态" style="display:flex;" :rules="{required: true, message:'请选择状态',trigger:'blur'}">
                      <a-select v-model="form.addArr[index].status" placeholder="请选择">
                          <a-select-option value="0"> 未开始 </a-select-option>
                          <a-select-option value="1"> 执行中 </a-select-option>
                          <a-select-option value="2"> 已完成 </a-select-option>
                      </a-select>
                  </a-form-model-item>
                  
                  <a-form-model-item :prop="'addArr.'+index+'.name'" label="姓名" style="display:flex;" :rules="{required: true, message:'请输入名称',trigger:'blur'}">
                      <a-input v-model="form.addArr[index].name"  :max-length="15" placeholder="请输入" />
                  </a-form-model-item>
                  <a-button type="dashed" v-if="index !== 0"  style="width: 5%;cursor: pointer;margin: 0 0 0 70%;color: rgb(97, 97, 229);" @click="delectContent(index)">删除</a-button>
                  </div>
                  <a-button type="dashed" style="width: 5%;cursor: pointer;margin: 2% 0 0 70%;color: rgb(97, 97, 229);" @click="addContent">
                          <a-icon type="plus" />添加
                      </a-button>
      </a-form-model>
      <a-button style="width: 5%;cursor: pointer;margin: 2% 0 0 70%;color: rgb(208, 57, 19);" @click="btnSubmit">提交</a-button>
    </div>
  </template>

JS

<script>
  export default {
  data(){
      return{
      form:{
        contractNo:'',
        addArr:[//默认显示一条 
          {phone:'',status:'',name:''}
        ]
      },
      rules:{//固定input
        contractNo:[{ required: true, message: "请输入编号!", trigger: "blur" }]
      }
      }
  },
 // vue实现动态添加输入框(antdv组件)
  methods:{
    addContent(){//添加
      if(this.form.addArr.length<6){
        this.form.addArr.push(
        {phone:'',status:'',name:''}
      )
      }else{
        alert('添加条数限制')
      }
     
    },
    delectContent(index){//删除
    this.form.addArr.splice(index, 1)
    },
    // 提交
    btnSubmit(){
      this.$refs.ruleForm.validate(rules => {
        if(rules){
           alert('1111111111')
        }
      })
    },
  },
  }
  </script>
 案例 
不可以单独删除表单的某一项 直接删除一行 
有ID 通过ID删除么有item 删除 找到对应的唯一值

案例


<template>
    <div>
      <a-form-model ref="ruleForm" :model="form" :rules="rules">
                  <a-form-model-item prop="contractNo" label="编号" style="display:flex;">
                      <a-input  v-model="form.contractNo"  :max-length="15" placeholder="请输入" />
                  </a-form-model-item>
                  <!-- 动态 -->
                  <div v-for="(item,index) in form.addArr" :key="index" style="border: 1px solid;">
                    <a-form-model-item :prop="'addArr.'+index+'.phone'" :label="`手机号${index+1}`"  :rules="{required: true, message:`请输入手机号`,trigger:'blur'}" style="display:flex;">
                      <a-input v-model="form.addArr[index].phone"  :max-length="15" placeholder="请输入" />
                  </a-form-model-item>
                  
                  <a-form-model-item  :prop="'addArr.'+index+'.status'" label="状态" style="display:flex;" :rules="{required: true, message:'请选择状态',trigger:'blur'}">
                      <a-select v-model="form.addArr[index].status" placeholder="请选择">
                          <a-select-option value="0"> 未开始 </a-select-option>
                          <a-select-option value="1"> 执行中 </a-select-option>
                          <a-select-option value="2"> 已完成 </a-select-option>
                      </a-select>
                  </a-form-model-item>
                  
                  <a-form-model-item :prop="'addArr.'+index+'.name'" label="姓名" style="display:flex;" :rules="{required: true, message:'请输入名称',trigger:'blur'}">
                      <a-input v-model="form.addArr[index].name"  :max-length="15" placeholder="请输入" />
                  </a-form-model-item>
                  <a-button type="dashed" v-if="index !== 0"  style="width: 5%;cursor: pointer;margin: 0 0 0 70%;color: rgb(97, 97, 229);" @click="delectContent(index)">删除</a-button>
                  </div>
                  <a-button type="dashed" style="width: 5%;cursor: pointer;margin: 2% 0 0 70%;color: rgb(97, 97, 229);" @click="addContent">
                          <a-icon type="plus" />添加
                      </a-button>
      </a-form-model>
      <a-button style="width: 5%;cursor: pointer;margin: 2% 0 0 70%;color: rgb(208, 57, 19);" @click="btnSubmit">提交</a-button>
    </div>
  </template>
  <script>
  export default {
  data(){
      return{
      form:{
        contractNo:'',
        addArr:[//默认显示一条 
          {phone:'',status:'',name:''}
        ]
      },
      rules:{//固定input
        contractNo:[{ required: true, message: "请输入编号!", trigger: "blur" }]
      }
      }
  },
 // vue实现动态添加输入框(antdv组件)
  methods:{
    addContent(){//添加
      if(this.form.addArr.length<6){
        this.form.addArr.push(
        {phone:'',status:'',name:''}
      )
      }else{
        alert('添加条数限制')
      }
     
    },
    delectContent(index){//删除
    this.form.addArr.splice(index, 1)
    },
    // 提交
    btnSubmit(){
      this.$refs.ruleForm.validate(rules => {
        if(rules){
           alert('1111111111')
        }
      })
    },
  },
  }
  </script>
  
  <style>
  
  </style>
  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值