当前位置: 首页 > ops >正文

VUE el-select下拉框动态设置禁用,删除后恢复可选择

场景:点击新增添加按钮,列表table会新增一条包含下拉菜单的数据,如果其中任何一个下拉框选择了某个值,那么新增的下拉菜单的选项中该值是禁用状态,只能选择其他未被选中过的值。点击删除按钮后,已禁用的选项放开,可再次选择。

思路:在使用 <el-option> 组件时,如果你希望在选择某个选项后禁用它,可以通过动态绑定 disabled 属性来实现。这通常涉及到两个方面:

  1. 选择后的禁用:当用户选择了一个选项后,你需要更新这个选项的 disabled 状态。

  2. 动态绑定:使用 Vue 的响应式数据来动态控制 disabled 属性。

示例:

假设你有一个下拉选择框,用户选择后,希望该选项不再可用。

HTML 部分。
1、单个下拉
<template><el-select v-model="selected" placeholder="请选择" @change="change"><el-optionv-for="item in options":key="item.value":label="item.label":value="item.value":disabled="item.disabled"></el-option></el-select>
</template>2、循环多个下拉
<template>
<el-form ref="form" :model="formData" :inline="true" label-position="right"><el-button type="primary" @click="addCity">添加</el-button><div v-for="(item,index) in formData.cityList" :key="item.key"><el-form-item label="居住地" :prop="`cityList[${index}].city`" label-width="150" :rules="{ required: true, message: '请选择', trigger: 'blur'}"><span class="label" slot="label" v-if="!index"><template><em style="color: red">*</em></template>{{ lableName}}</span><el-select filterable clearable v-model="item.city" @change="cityChange(`cityList[${index}].city`, item)"><el-optionv-for="(child, idx) in cityOptions":value="child.value":label="child.label":key="idx":disabled="child.disabled"></el-option></el-select></el-form-item><el-button type="danger" @click="delCity(index)">删除</el-button></div><el-button type="primary" @click="subCity">提交</el-button>
</el-form>
</template>
JavaScript 部分
<script>
export default {data() {return {//单个数据selected: '', // 用户选择的选项options: [{ value: 'option1', label: '选项1' },{ value: 'option2', label: '选项2' },{ value: 'option3', label: '选项3' }],//多个数据lableName: '居住地',formData: {cityList: [{city: '',key: Date.now()}],},cityOptions: [{ value: 'Chengdu', label: '成都' },{ value: 'Shenzhen', label: '深圳' },{ value: 'Guangzhou', label: '广州' }],};},watch: {selected(newVal) {this.disableSelectedOption();}},methods: {方法一:单个select设置禁用disableSelectedOption() {this.options = this.options.map(option => {if (option.value === this.selected) {return { ...option, disabled: true }; // 禁用当前选中的选项}return option; // 其他选项保持不变});},方法二:批量添加后多个select设置禁用addCity() {this.formData.cityList.push({city: '',key: Date.now()})},delCity(index) {this.$confirm('确定删除?', '提示', {confirmButtonText: '确定',cancelButtonText: '取消',type: 'warning',}).then(() => {this.formData.cityList.splice(index, 1)this.disabledOptions()}).catch(() => {})},cityChange(name, item) {this.$refs.form.validateField(name) // 清除必填校验this.disabledOptions()},subCity() {this.$refs.form.validate(valid => {if (valid) {//todo} else {return false}})},disabledOptions() {this.cityOptions.forEach(item => {item.disabled = this.formData.cityList.some(row=> row.city=== item.value)})},}
}
</script>
http://www.xdnf.cn/news/5048.html

相关文章:

  • UE像素流是什么
  • 2025 SD省集总结
  • 图像匹配导航定位技术 第 9 章
  • 快手618购物节招商启动,国补可叠加跨店满减等大促补贴
  • Java-很深我只知其一构造(Builder)
  • JAVA多态——向上转型
  • Java 自动下载 Chromium
  • 数学教育软件
  • AI技术发展:就业的颠覆者还是新机遇的缔造者?
  • 古方焕新潮!李良济盒马联名养生水,以创新赋能中式养生新潮流
  • 明远智睿SSD2351开发板:仪器仪表与智慧农业的创新利器
  • 【C/C++】C++中noexcept的妙用与性能提升
  • 安科瑞光伏综自系统在新能源电站中的应用及调度上传方案研究
  • HNOI2004.打鼹鼠
  • 洛谷 P1179【NOIP 2010 普及组】数字统计 —— 逐位计算
  • 等保系列(三):等保测评的那些事
  • [特征工程]机器学习-part2
  • ABB电机保护单元通过profibusDP主站转profinet网关接入到西门子1200plc系统
  • MapStruct用法实战
  • STL-vector
  • 对比学习入门
  • Unity按钮事件冒泡
  • 20.java反序列化-对象的类自定义的readObject()方法
  • 【算法】:滑动窗口
  • C++八股 —— vector底层
  • OpenHarmony launcher开发——删除dock栏
  • MegaCLI Raid管理工具
  • 如何训练deepseek语言大模型
  • 数据结构(1)复杂度
  • QT事件介绍及实现字体放大缩小(滚轮)