vue多个el-select共用同一个筛选列表,如何控制一个选择了其他就不能选已经被选择的项了

63 篇文章 1 订阅
18 篇文章 0 订阅

多个select 共用一个options,且每一个option只能用一次。动态禁用每一个options。
在这里插入图片描述

<div class="col-md-12">
  <div class="panel panel-default" style="margin-bottom: 10px">
    <div class="panel-heading">品名适应度</div>
      <div class="panel-body"  style="border-bottom: 1px solid #bcc7dd;">
        <el-form-item label="钻石:" prop="diamonds" size="small">
          <el-select v-model="largeForm.diamonds" multiple placeholder="请选择" style="width: 100%" @change="handleSelect()">
            <el-option
              v-for="item in placeData"
              :key="item.value"
              :label="item.label"
              :value="item.value"
              :disabled="getDisable(item.value)">
            </el-option>
          </el-select>
        </el-form-item>
        <el-form-item label="铂金:" prop="birkin" size="small">
          <el-select v-model="largeForm.birkin" multiple placeholder="请选择"  style="width: 100%" @change="handleSelect()">
            <el-option
              v-for="item in placeData"
              :key="item.value"
              :label="item.label"
              :value="item.value"
              :disabled="getDisable(item.value)">
            </el-option>
          </el-select>
        </el-form-item>
        <el-form-item label="黄金:" prop="gold" size="small">
          <el-select v-model="largeForm.gold" multiple placeholder="请选择"  style="width: 100%" @change="handleSelect()">
            <el-option
              v-for="item in placeData"
              :key="item.value"
              :label="item.label"
              :value="item.value"
              :disabled="getDisable(item.value)">
            </el-option>
          </el-select>
        </el-form-item>
        <el-form-item label="白银:" prop="silver" size="small">
          <el-select v-model="largeForm.silver" multiple placeholder="请选择"  style="width: 100%" @change="handleSelect()">
            <el-option
              v-for="item in placeData"
              :key="item.value"
              :label="item.label"
              :value="item.value"
              :disabled="getDisable(item.value)">
            </el-option>
          </el-select>
        </el-form-item>
      </div>
  </div>
          
 placeData: {!! $placeData !!},
 selectedOptions: [],

handleSelect(){
  var that =  this;
  var diamonds = that.largeForm.diamonds;
  var birkin   = that.largeForm.birkin;
  var gold     = that.largeForm.gold;
  var silver   = that.largeForm.silver;
  var arr = [];
  for(var i in diamonds){
    arr.push(diamonds[i]);
  }
  for(var i in birkin){
    arr.push(birkin[i]);
  }
  for(var i in gold){
    arr.push(gold[i]);
  }
  for(var i in silver){
    arr.push(silver[i]);
  }
  that.selectedOptions = arr;
},

getDisable(value) {
  var that =  this;
  // console.log(that.selectedOptions);
  if (that.selectedOptions.indexOf(value) >= 0) {
    return true;
  } else {
    return false;
  }
},

另例:

<el-table-column prop="fields" label="映射字段">
   <template #default="scope">
      <el-select filterable v-model="scope.row.select" clearable class="w-full"                 
          @change="selectChange(scope.row.select,scope.$index)">
         <el-option v-for="item in state.tables" :key="item.id" :label="item.name" 
             :value="item.id" :disabled="getDisable(item.id)">
            {{ item.name }}
         </el-option>
       </el-select>
    </template>
 </el-table-column>
const state = reactive({
    tables : [{
      id:1,
      name:'database'
    },
    {
      id:2,
      name:'database2'
    },
    {
      id:3,
      name:'database3'
    }],
    tableData : [{
      id : 1,
      name : '',
      select:'',
    },
    {
      id : 2,
      name : '',
      select:'',
    },
    {
      id : 2,
      name : '',
      select:'',
    }],
    selectedOptions: [],
  });
  const selectChange = (value, index) => {
    console.log(value, index);
    state.selectedOptions[index] = value
  };
  const getDisable = (value) => {
    if (state.selectedOptions.indexOf(value) >= 0) {
        return true;
      } else {
        return false;
      }
  };
  return {
    state, getDisable, selectChange, 
  }
  • 0
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
您可以通过监听第一个`el-select`的`change`事件,然后在事件处理程序中将其他`el-select`的绑定值设置为空。以下是一个示例代码: ```vue <template> <div> <el-select v-model="selectedItem" @change="handleSelectChange"> <el-option v-for="item in selectList" :key="item.value" :label="item.label" :value="item.value"></el-option> </el-select> <el-select v-model="selectedItem2"> <el-option v-for="item in filteredSelectList" :key="item.value" :label="item.label" :value="item.value"></el-option> </el-select> <el-select v-model="selectedItem3"> <el-option v-for="item in filteredSelectList" :key="item.value" :label="item.label" :value="item.value"></el-option> </el-select> </div> </template> <script> export default { data() { return { selectList: [ { label: 'Option 1', value: '1' }, { label: 'Option 2', value: '2' }, { label: 'Option 3', value: '3' } ], selectedItem: '', selectedItem2: '', selectedItem3: '' }; }, computed: { filteredSelectList() { // 这里可以根据需求进行筛选列表的逻辑 return this.selectList; } }, methods: { handleSelectChange() { this.selectedItem2 = ''; this.selectedItem3 = ''; } } }; </script> ``` 在上述代码中,我们使用了一个`selectList`数组来存储筛选列表。当第一个`el-select`的选择发生变化时,`handleSelectChange`方法会被调用,然后将其他`el-select`的绑定值清空,从而实现了清空功能。注意,这里的`filteredSelectList`是一个计算属性,你可以根据实际需求对筛选列表进行逻辑处理。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值