select下拉框这个问题怎么解决?

image.png

这两个下拉框用的是同一个数据,数据结构如下:
image.png

HTML代码如下:

<a-select placeholder="请选择任课教师" style="width: 150px" allowClear>
   <a-select-option v-for="(item1,index1) in data" :key="index1" :value="item1.user_id">
       {{item1.truename}}
   </a-select-option>
</a-select>
阅读 2.2k
3 个回答

上个选择框onChange的时候记录选择的ID,对下面的data filter一下就行了

通过computed,对数组进行过滤, 可以做到此要求.

看下是不是这种效果
http://jsrun.net/qLVKp

<template>
<a-select placeholder="请选择任课教师" style="width: 150px" allowClear @change="(val) => { changeHandler(val, selectKey) }" :key="selectKey">
   <a-select-option v-for="(item1,index1) in mydata" :key="index1" :value="item1.id">
       {{item1.truename}}
   </a-select-option>
</a-select>
</template>
<script>
exoprt default {
    data() {
        return {
            data: [{id: 1, trunname: '俊老师'}, {id: 2, trunname: '李老师'}, {id: 3, trunname: '王老师'}],
            chooseArr: new Map()
        }
    },
    computed: {
        mydata() {
            return this.data.filter(item => {
                let status = true
                this.chooseArr.forEach(val => {
                    if (val == item.id) {
                        status = false
                    }
                })
                return status
            })
        }
    },
    methods: {
        changeHandler(curId, selectKey) {
            if (!this.chooseArr.includes(curId)) {
                this.chooseArr.add(selectKey, curId)
            }
            // 从上图可以看出select也会被循环,因此这里得selectKey应该是你顶部循环体
            // 不止需要传入curId,还得再传入一个当前selectKey,因为一个selectKey只能存在一个对应得选项,否则,同一个select多次切换会添加多个进chooseArr,你
        }
    }
}
</script>
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题