el-select 两个下拉框选项互斥

<div>两个相同选项的值互斥</div>
<el-select
	v-model="valueA"
	multiple
	placeholder="选项1"
>
	<el-option
		v-for="item of selectData"
		:key="item.value"
		:label="item.label"
		:value="item.value"
		:disabled="hasInclude(valueB, item.value)"
	/>
</el-select>

<el-select
	v-model="valueB"
	multiple
	placeholder="选项2"
>
	<el-option
		v-for="item of selectData"
		:key="item.value"
		:label="item.label"
		:value="item.value"
		:disabled="hasInclude(valueA, item.value)"
	/>
</el-select>
data() {
	return {
		valueA: '',
		valueB: '',
		selectData: [{
		   value: '选项1',
		   label: '黄金糕'
		 }, {
		   value: '选项2',
		   label: '双皮奶'
		 }, {
		   value: '选项3',
		   label: '蚵仔煎'
		 }, {
		   value: '选项4',
		   label: '龙须面'
		 }, {
		   value: '选项5',
		   label: '北京烤鸭'
		 }],
	}
},

methods: {
	// 判断数组中是否有这个元素
    hasInclude(arr = [], item) {
        return arr.includes(item)
    },
},

如下图所示:选项1选了1、3项,选项2就不能选了,完成了一个选项互斥
在这里插入图片描述

### 实现 `el-select` 点击选择下拉框内容的方法 为了实现 `el-select` 组件点击选择下拉框中的选项,通常情况下只需遵循组件默认行为即可完成操作。然而当涉及到更复杂的需求时,比如带有复选框的下拉菜单或多选功能,则需额外配置。 对于简单的单选情况: ```html <template> <div> <el-select v-model="selectedValue" placeholder="请选择"> <el-option v-for="item in options" :key="item.value" :label="item.label" :value="item.value"> </el-option> </el-select> </div> </template> <script> export default { data() { return { selectedValue: '', options: [{ value: 'option1', label: '黄金糕' }, { value: 'option2', label: '双皮奶' }] } } } </script> ``` 如果要处理带有多选以及全选逻辑的情况,可以通过如下方式设置: #### 多选模式下的 `el-select` ```html <template> <div> <!-- 设置 multiple 属性开启多选 --> <el-select v-model="multipleSelection" multiple placeholder="请选择"> <el-checkbox-group v-model="checkedOptions"> <el-option v-for="(item, index) in options" :key="index" :label="item.label" :value="item.value"> </el-option> </el-checkbox-group> </el-select> <!-- 添加按钮用于触发全选/取消全选 --> <button @click="toggleAllSelect">全选/取消全选</button> </div> </template> <script> export default { methods: { toggleAllSelect() { const allValues = this.options.map(option => option.value); if (this.checkedOptions.length === allValues.length && this.checkedOptions.every(value => allValues.includes(value))) { this.multipleSelection = []; this.checkedOptions = []; } else { this.multipleSelection = [...allValues]; this.checkedOptions = [...allValues]; } } }, watch: { checkedOptions(newValue){ this.multipleSelection=newValue; } }, data(){ return{ multipleSelection:[], checkedOptions:[],//绑定checkbox的选择状态 options:[ {value:'op1',label:'Option One'}, {value:'op2',label:'Option Two'} ] }; } }; </script> ``` 上述代码展示了如何创建一个多选版本的 `el-select` 并实现了基本的全选和反向选择的功能[^1]。 另外需要注意的是,在某些场景下可能需要手动控制下拉列表的状态(打开或关闭),这可以通过给 `el-select` 赋予一个唯一的 `ref` 来访问其实例并调用相应的 API 方法来达成目的[^2]。 最后,针对一些特殊需求如不希望展示标准的下拉面板而是采用对话框或其他形式呈现更多交互控件的情况下,也可以考虑利用 `$refs.choose.blur()` 的技巧配合其他 UI 控制手段达到预期效果[^3]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值