vue+element ui动态增加表单项并支持删除

需求:点击加号动态添加表单项站点和通道,当站点和通道有多个时允许删除,只有一个时不能删除,删除按钮隐藏

先来看看效果吧

默认初始效果:

点击加号动态新增表单项后:

 上代码:

<template>
 <div class="select-site-ipc" v-for="(item,index) in alarmRuleForm.alarmSourceArray" 
  :key=index>
       <div class="site-box">
         <el-form-item class="site-item" :prop="'alarmSourceArray.' + index + '.siteId'" :rules="[{ required:true,message:$translate('errorCode.33042'), trigger: 'change' }]">
            <el-select
              ref='sceneSelect'
                class="site-scene"
                :label="$translate('site')"
                required
                v-model="item.siteId"
                filterable
                :fitDropdownWidth="true"
                style="width:368px"
                @change="changeSite($event,index)"
                @visible-change='visibleChange'
              >
                <el-option
                  v-for="item in siteOps"
                  :key="item.value"
                  :label="item.label"
                  :value="item.value"
                  :title="item.label"
                  :disabled="item.disabled"
                >
                  <span>{{ item.label }}</span>
                </el-option>
              </el-select>
              <i v-if='alarmRuleForm.alarmSourceArray.length>1' class="el-icon-close del-alarm-source" @click="deleteItem(index)"></i>
        </el-form-item>
       </div>
        <el-form-item :prop="'alarmSourceArray.' + index + '.ipc'" :rules="[{ required:true,message:$translate('errorCode.33017'), trigger: 'change' }]">
             <el-select
               v-model="item.ipc"
               required
               multiple
               collapse-tags
               style="width:368px;"
               placeholder="请选择">
               <el-option
                v-for="item in item.chlList"
                :key="item.value"
                :label="item.label"
                :value="item.value">
               </el-option>
             </el-select>
         </el-form-item>
       </div>
       <!-- 可添加站点和通道 -->
        <el-row>
          <el-col><div class="add-site" @click="AddSite"><SvgImg viewBox="0 0 14 14" width="14" height="14"><icon-add /></SvgImg> {{$translate('site')}}</div></el-col>
        </el-row>
      </div>
</template>

<script>
 export default{ 
  data(){
  return {
    alarmRuleForm:{
      alarmSourceArray: [
        { siteId: '', ipc: [],chlList: [] }
       ],
       }
     }
    },
   methods:{
      // 点击新增站点
    AddSite () {
      let index = null
      if (this.operationType === 1) {
        this.alarmRuleForm.alarmSourceArray.push({
          siteId: '',
          ipc: [],
          chlList: []
        })
        index = this.alarmRuleForm.alarmSourceArray.length - 1
      } else {
        index = this.alarmRuleForm.alarmSourceArray.length
      }
    },
    deleteItem (index) {
      this.alarmRuleForm.alarmSourceArray.splice(index,1)
    },
   }
 }
   
</script>

其中,核心代码是表单项prop的写法,首先,先定义一个数组用来存放可动态添加的部分(alarmRuleForm.alarmSourceArray),外层循环该数组,其中每一个表单项的prop就表示成‘数组名.index.变量名’即"'alarmSourceArray.'+index+'.siteId'",这里不能用item来替换数组名alarmSourceArray

  • 4
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值