vue elementui中多个select选择器公用一套选项option,且每个选项只能被选中一次

vue elementui中多个select选择器公用一套选项option,且每个选项只能被选中一次

用于记录,也希望为写到这里堵塞住的朋友提供一点帮助,代码如下:
script标签内

data(){
    return{
            fieldList: [],
            selectSourceOption: [], // 选中的源字段,其他下拉框无此字段
            selectTargerOption:[], // 选中的目标源字段,其他下拉框无此字段
            sourceFieldOption: [],// 源字段所有的选项
            targetFieldOption: [],// 目标源字段所有的选项

     }
}
// 初始化获取数据时记得保存已选中数据到数组中,即selectSourceOption或selectTargerOption里面
methods:{
   selectFieldOption(currentSelectValue,name) {
            // 筛选选中的从option里面剔除(核心代码),且区分源与目标源字段
            let remainingOption = []
            if (name == 'source') {
                // 源
                remainingOption = this.sourceFieldOption.filter(item=>{
                    return this.selectSourceOption.indexOf(item.name)==-1 || currentSelectValue == item.name
                })
                return remainingOption
            } else if (name == 'target') {
                // 目标源
                remainingOption = this.targetFieldOption.filter(item=>{
                    return this.selectTargerOption.indexOf(item.name)==-1 || currentSelectValue == item.name
                })
                return remainingOption
            }
        },

getSource (num,$event) {// 主要看4、8部分,将选中的数据放入数组中
            switch(num) {
                case 4: 
                this.selectSourceOption = []
                this.fieldList.forEach(item=>{
                    this.selectSourceOption.push(item.sourceField)
                })
                break;
                case 8: 
                this.selectTargerOption = []
                this.fieldList.forEach(item=>{
                    this.selectTargerOption.push(item.targetField)
                })
                break;
            }
        },
}

template标签内

<el-row v-for="(items,index) in fieldList" :key="index">
                <el-col :span="12">
                    <el-form-item label="源字段" v-if="showField">
                        <el-select v-model="items.sourceField" placeholder="请选择源" @change="getSource(4,$event)" :disabled="noEdit" clearable>
                                    <el-option :disabled="item.disabled" :label="item.name" :value="item.name" v-for="(item,i) in selectFieldOption(items.sourceField,'source')" :key="i"></el-option>
                                </el-select>
                    </el-form-item>
                </el-col>
                <el-col :span="10">
                    <el-form-item label="目标源字段">
                        <el-select v-model="items.targetField" placeholder="请选择源" @change="getSource(8,$event)" clearable>
                            <el-option :disabled="item.disabled" :label="item.name" :value="item.name" v-for="(item,i) in selectFieldOption(items.targetField,'target')" :key="i"></el-option>
                        </el-select>
                    </el-form-item>
                </el-col>
                <el-col :span="2">
                    <el-button icon="el-icon-plus" @click="addField" v-if="index==0"></el-button>
                    <el-button icon="el-icon-minus" @click="deleteField(i)" v-else></el-button>
                </el-col>
            </el-row>

细节点有两处
1、el-option中的for循环里加入方法selectFieldOption来筛选选中的从option里面剔除(核心代码),且区分源与目标源字段
2、选中后将选中的选项放入到已选中数组内,以供筛选

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值