el-select 多选时与表格联动

el-select 多选时与表格联动,表格内容与select框的内容相关,效果如图
在这里插入图片描述
el-select 选项删除时,表格也跟着对应删除,如图
在这里插入图片描述
代码如下:

HTML:

<template>
	  <el-select v-model="value1" multiple placeholder="请选择" @change="change" multiple>
	    <el-option
	      v-for="item in options"
	      :key="item.value"
	      :label="item.label"
	      :value="item.value">
	    </el-option>
	  </el-select>
	
	   <el-table
	      :data="tableData"
	      style="width: 100%">
	      <el-table-column
	        prop="name"
	        label="名称"
	        width="180">
	      </el-table-column>
	    </el-table>
	</template>

JS代码:

var Main = {
	    data() {
	      return {
	        options: [{
	          value: '选项1',
	          label: '黄金糕'
	        }, {
	          value: '选项2',
	          label: '双皮奶'
	        }, {
	          value: '选项3',
	          label: '蚵仔煎'
	        }, {
	          value: '选项4',
	          label: '龙须面'
	        }, {
	          value: '选项5',
	          label: '北京烤鸭'
	        }],
	        value1: [],
	        value2: [],
	        tableData:[]
	     	 }
	    },
	  methods:{
	    change(val) {
	         // 当添加的有重复的时候去掉重复项
	       if(this.tableData.length > 0) {
	         this.value1.forEach(element =>{
	           this.tableData.forEach((item,index) =>{
	             if(element == item.value) {
	                this.tableData.splice(index,1);
	              }
	           })
	         })
	       }
	      
	      // 添加进表格
	      this.value1.forEach(element =>{
	        this.options.forEach(item =>{
	          if(element == item.value){
	            let obj = {
	              name:item.label,
	              value:item.value
	            }
	            this.tableData.push(obj);
	          }
	        })
	      })
	      
	      // 当选中中删除某一项时
	      // 因为select多选删除时返回的参数不是被删除的项,而是数组中删除项后的剩余项,
	      所以要用差集法找到被删除的那一项,然后把表格中对应的项删除
	      
	      // 表格数据拷贝一份
	      let deleteArr = [];
	      this.tableData.forEach(item =>{
	         deleteArr.push(item)
	       })
	      // 通过遍历 删除得到差集,就是被删除的项
	      val.forEach(element =>{
	          deleteArr.forEach((item,index) =>{
	             if(element == item.value) {
	                deleteArr.splice(index,1);
	              }
	           })
	       })
	      
	      //  表格数组和差集对比 删除select框中删除的对应项
	      this.tableData.forEach((item,index) =>{
	          if(deleteArr.length == 1) {
	             if(item.value == deleteArr[0].value) {
	                this.tableData.splice(index,1)
	             }
	          }
	       })
	      
	    }
	  }
	  }
	var Ctor = Vue.extend(Main)
	new Ctor().$mount('#app')

耶!

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值