当前位置:首页 > VUE

vue实现select组件多选

2026-01-21 03:47:10VUE

实现多选 Select 组件

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

原生 HTML 实现

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

<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>

自定义样式与功能

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

vue实现select组件多选

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

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

相关文章

elementui多选

elementui多选

ElementUI 多选组件使用指南 ElementUI 提供了 el-select 组件支持多选功能,通过设置 multiple 属性即可启用。以下是具体实现方法和常见场景示例: 基础多选实现 设…

vue实现tooltips组件

vue实现tooltips组件

实现基础 Tooltip 组件 创建一个名为 Tooltip.vue 的单文件组件,包含模板、样式和逻辑: <template> <div class="tooltip-con…

vue 实现列表多选

vue 实现列表多选

Vue 实现列表多选的方法 使用 v-model 绑定数组 通过 v-model 绑定一个数组,可以自动处理多选逻辑。适用于复选框(checkbox)场景。 <template> &…

vue实现多选 全选

vue实现多选 全选

实现多选和全选功能 在Vue中实现多选和全选功能可以通过以下方式完成。假设有一个列表数据,需要实现勾选部分项或一键全选。 数据准备 定义一个数据列表和选中项的数组,以及全选状态。 data() {…

vue实现日历组件

vue实现日历组件

Vue 日历组件实现步骤 基础结构搭建 使用Vue 3的Composition API或Options API创建组件框架。核心结构包括年份/月份切换按钮、星期标题栏和日期网格。 <templ…

vue组件实现注册

vue组件实现注册

Vue 组件注册的两种方式 全局注册 通过 Vue.component() 方法注册,注册后可在任意 Vue 实例中使用。通常在项目的入口文件(如 main.js)中操作: import Vue f…