element-ui select多选情况下获取label和value

本文介绍了一个使用Vue.js实现的多选下拉框组件案例,详细展示了如何通过v-model双向绑定来选择和获取选项,并实现了将选中项的ID与名称分别收集的功能。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

 HTML部分

               <el-select
                  v-model="value"
                  multiple
                  collapse-tags
                  ref="select"
                  @change="changeLocationValue" //将用到此方法
                  style="margin-left: 20px;"
                  placeholder="请选择角色">
                  <el-option
                    v-for="item in options" //options 数据源
                    :key="item.id"
                    :label="item.roleName" //我的label是 roleName
                    :value="item.id"> //我的value 是 id
                  </el-option>
                </el-select>

 js部分

data(){
    return {
        options:[
           {id:1,roleName:'dafe'},
           {id:2,roleName:'gged'},
           {id:3,roleName:'dafgddvde'},
           {id:4,roleName:'hjrtb'},
           {id:5,roleName:'fgdcbd'}
         ],
        departmentIds:[],
        departmentNames:[]
    }
}
   changeLocationValue(val){
      this.departmentIds = [] //初始化数据
      this.departmentNames = [] //初始化数据
      for(let i=0;i<=val.length-1;i++){
        this.options.find((item)=>{ //这里的options就是数据源
          if(item.id == val[i]){
            this.departmentIds.push(item.id) //这里的value我改成了id
            this.departmentNames.push(item.roleName) //这里的label我改成了roleName
          }
        });
      }
      console.log(this.departmentIds)
      console.log(this.departmentNames)
    },

Element UI 的下拉框组件通常提供单功能,如果需要实现同一类别内的并且不允许择其他类别的项,你可以通过编程的方式来控制这个行为。下面是一种可能的解决方案: 首先,在数据结构上,将项分类并存储在一个数组或对象中,每个类别有自己的子项。 ```javascript const categories = { categoryA: ['option1', 'option2'], categoryB: ['option3', 'option4'], }; // 假设 yourOptions 是从服务器获取的实际项列表 yourOptions = Object.values(categories).flat(); ``` 然后,在`element-ui`的`el-select`组件中,可以设置`filter-method`属性来过滤显示的项。结合当前已值,只展示同一类别的项。 ```html <el-select v-model="selectedItems" filterable filter-method="filterOptions"> <el-option v-for="(category, index) in Object.keys(categories)" :key="index" :label="category" :value="category" :disabled="!selectedItems.includes(category)"> {{ category }} ({{ categories[category].length }} options) </el-option> </el-select> <script> export default { data() { return { selectedItems: [], // 存储用户择的类别 }; }, methods: { filterOptions(value, search) { if (!search || !categories[value]) return; const filtered = categories[value].filter(item => item.includes(search)); return this.selectedItems.includes(value) ? filtered : filtered.filter(item => !this.containsOtherCategories(item)); }, containsOtherCategories(option) { for (let i of this.selectedItems) { if (i !== value && categories[i].includes(option)) return true; } return false; }, }, }; </script> ``` 在这个例子中,当用户择了某个类别后,`containsOtherCategories`函数会检查该项是否属于已经择的类别之外的其他类别。如果不是,则隐藏那些项,实现禁效果。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值