当前位置:首页 > VUE

vue实现select组件多选

2026-01-21 03:47:10VUE

实现多选 Select 组件

在 Vue 中实现多选 Select 组件可以通过原生 <select> 结合 multiple 属性或使用第三方 UI 库(如 Element UI、Ant Design Vue)。以下是两种常见实现方式:

vue实现select组件多选

原生 HTML 实现

使用原生 <select> 标签并添加 multiple 属性,通过 v-model 绑定数组类型数据:

vue实现select组件多选

<template>
  <select v-model="selectedOptions" multiple>
    <option v-for="option in options" :value="option.value">
      {{ option.label }}
    </option>
  </select>
</template>

<script>
export default {
  data() {
    return {
      selectedOptions: [],
      options: [
        { value: 'opt1', label: 'Option 1' },
        { value: 'opt2', label: 'Option 2' },
        { value: 'opt3', label: 'Option 3' }
      ]
    }
  }
}
</script>

使用 Element UI 实现

安装 Element UI 后直接使用 el-select 组件:

<template>
  <el-select v-model="selectedOptions" multiple placeholder="请选择">
    <el-option
      v-for="item in options"
      :key="item.value"
      :label="item.label"
      :value="item.value">
    </el-option>
  </el-select>
</template>

<script>
export default {
  data() {
    return {
      selectedOptions: [],
      options: [{
        value: 'opt1',
        label: 'Option 1'
      }, {
        value: 'opt2',
        label: 'Option 2'
      }, {
        value: 'opt3',
        label: 'Option 3'
      }]
    }
  }
}
</script>

自定义样式与功能

若需要完全自定义实现,可参考以下结构:

<template>
  <div class="custom-multi-select">
    <div 
      class="selected-options"
      @click="toggleDropdown">
      <span v-for="opt in selectedOptions">
        {{ getLabel(opt) }}
      </span>
    </div>
    <div v-show="isOpen" class="dropdown">
      <div 
        v-for="option in options"
        @click="toggleOption(option.value)"
        :class="{ selected: isSelected(option.value) }">
        {{ option.label }}
      </div>
    </div>
  </div>
</template>

<script>
export default {
  props: {
    options: Array,
    value: Array
  },
  data() {
    return {
      isOpen: false,
      selectedOptions: this.value || []
    }
  },
  methods: {
    toggleDropdown() {
      this.isOpen = !this.isOpen
    },
    toggleOption(value) {
      const index = this.selectedOptions.indexOf(value)
      index === -1 
        ? this.selectedOptions.push(value)
        : this.selectedOptions.splice(index, 1)
      this.$emit('input', this.selectedOptions)
    },
    isSelected(value) {
      return this.selectedOptions.includes(value)
    },
    getLabel(value) {
      const option = this.options.find(opt => opt.value === value)
      return option ? option.label : ''
    }
  }
}
</script>

注意事项

  • 多选场景下 v-model 必须绑定数组类型
  • 原生实现需自行处理样式和交互体验
  • 第三方库通常提供更完善的功能(如搜索、标签展示等)
  • 移动端需考虑交互适配问题

标签: 多选组件
分享给朋友:

相关文章

vue实现折叠组件

vue实现折叠组件

Vue 折叠组件实现方法 基于 v-show 和事件触发 通过 v-show 控制内容的显示与隐藏,结合点击事件切换状态。 <template> <div> &…

vue多选实现

vue多选实现

Vue多选实现方法 在Vue中实现多选功能可以通过多种方式完成,以下是常见的几种方法: 使用v-model绑定数组 通过v-model绑定一个数组,当复选框被选中时,值会自动添加到数组中。…

uniapp 分页组件

uniapp 分页组件

uniapp 分页组件实现方法 在uniapp中实现分页功能,可以通过自定义组件或使用第三方组件库完成。以下是几种常见实现方式: 自定义分页组件 创建一个名为uni-pagination的组件,模板…

Vue实现级联多选

Vue实现级联多选

Vue 实现级联多选的方法 使用 Element UI 的 Cascader 组件 Element UI 提供了 el-cascader 组件,支持多选功能。通过设置 props 的 multiple…

vue实现秒表组件

vue实现秒表组件

实现秒表组件的基本思路 使用Vue实现秒表组件需要管理时间状态、控制计时器的启动/暂停/重置功能,并通过计算属性动态显示格式化时间。核心逻辑包括利用setInterval更新计时数据,并通过生命周期钩…

vue实现父子组件

vue实现父子组件

Vue 父子组件通信实现方式 1. 父组件向子组件传递数据(Props) 父组件通过 props 向子组件传递数据,子组件通过 props 接收数据。 父组件模板: <template>…