当前位置:首页 > VUE

vue实现多选搜索

2026-01-18 17:49:53VUE

Vue 多选搜索实现方法

使用 Element UI 的 Select 组件

Element UI 提供了带有搜索功能的多选组件,适合快速实现需求。

安装 Element UI:

npm install element-ui

代码示例:

vue实现多选搜索

<template>
  <el-select
    v-model="selectedItems"
    multiple
    filterable
    placeholder="请搜索并选择"
    @change="handleChange">
    <el-option
      v-for="item in filteredOptions"
      :key="item.value"
      :label="item.label"
      :value="item.value">
    </el-option>
  </el-select>
</template>

<script>
export default {
  data() {
    return {
      selectedItems: [],
      options: [
        { value: '1', label: '选项1' },
        { value: '2', label: '选项2' }
      ],
      searchQuery: ''
    }
  },
  computed: {
    filteredOptions() {
      return this.options.filter(option => 
        option.label.toLowerCase().includes(this.searchQuery.toLowerCase())
      )
    }
  },
  methods: {
    handleChange(value) {
      console.log(value)
    }
  }
}
</script>

自定义实现多选搜索

对于需要完全自定义的场景,可以结合 input 和 checkbox 实现。

<template>
  <div class="multi-select">
    <input 
      v-model="searchQuery"
      placeholder="搜索..."
      @input="filterOptions">

    <div class="options">
      <div 
        v-for="option in filteredOptions"
        :key="option.value"
        class="option">
        <input 
          type="checkbox"
          :id="option.value"
          :value="option.value"
          v-model="selectedItems">
        <label :for="option.value">{{ option.label }}</label>
      </div>
    </div>
  </div>
</template>

<script>
export default {
  data() {
    return {
      searchQuery: '',
      selectedItems: [],
      options: [
        { value: '1', label: '选项1' },
        { value: '2', label: '选项2' }
      ],
      filteredOptions: []
    }
  },
  created() {
    this.filteredOptions = [...this.options]
  },
  methods: {
    filterOptions() {
      this.filteredOptions = this.options.filter(option =>
        option.label.toLowerCase().includes(this.searchQuery.toLowerCase())
      )
    }
  }
}
</script>

<style>
.multi-select {
  border: 1px solid #dcdfe6;
  padding: 10px;
  border-radius: 4px;
}
.options {
  max-height: 200px;
  overflow-y: auto;
}
.option {
  padding: 5px 0;
}
</style>

使用 Vue Multiselect 插件

vue-multiselect 是专门为 Vue 设计的强大多选组件。

vue实现多选搜索

安装:

npm install vue-multiselect

使用示例:

<template>
  <multiselect
    v-model="selected"
    :options="options"
    :multiple="true"
    :searchable="true"
    :close-on-select="false"
    placeholder="搜索并选择"
    label="label"
    track-by="value">
  </multiselect>
</template>

<script>
import Multiselect from 'vue-multiselect'

export default {
  components: { Multiselect },
  data() {
    return {
      selected: [],
      options: [
        { label: '选项1', value: 1 },
        { label: '选项2', value: 2 }
      ]
    }
  }
}
</script>

<style src="vue-multiselect/dist/vue-multiselect.min.css"></style>

实现远程搜索

当需要从服务器获取选项时,可以使用防抖技术优化性能。

<script>
export default {
  methods: {
    fetchOptions: _.debounce(function(query) {
      axios.get('/api/options', { params: { q: query } })
        .then(response => {
          this.options = response.data
        })
    }, 500)
  },
  watch: {
    searchQuery(newVal) {
      this.fetchOptions(newVal)
    }
  }
}
</script>

注意事项

  • 大数据量情况下考虑虚拟滚动优化性能
  • 移动端需要特别注意触摸交互体验
  • 选中的项目需要有明确的视觉反馈
  • 考虑添加全选/清除全部等快捷操作

以上方法可根据实际项目需求选择使用,Element UI 方案适合快速开发,自定义方案灵活性最高,vue-multiselect 则提供了丰富的开箱即用功能。

标签: 多选vue
分享给朋友:

相关文章

vue实现aop切面

vue实现aop切面

Vue 实现 AOP 切面编程的方法 在 Vue 中实现 AOP(面向切面编程)可以通过多种方式,以下是几种常见的实现方法: 使用 Vue 混入(Mixins) Vue 的混入机制可以用于实现横切…

用vue实现搜索查询

用vue实现搜索查询

实现搜索查询的基本思路 在Vue中实现搜索查询功能通常涉及以下几个核心部分:数据绑定、事件监听、过滤逻辑和UI反馈。以下是一个完整的实现方案。 数据绑定与输入框 创建一个Vue组件,包含一个输入框用…

vue播放倍速怎么实现

vue播放倍速怎么实现

实现Vue播放倍速的方法 在Vue中实现播放倍速功能通常涉及HTML5的<video>元素或第三方播放器库。以下是几种常见实现方式: 使用原生HTML5 video元素 通过ref获取v…

vue实现安全免登录

vue实现安全免登录

Vue 实现安全免登录的方案 免登录功能通常通过持久化认证状态(如 Token)实现,但需兼顾安全性。以下是基于 Vue 的常见实现方案: 基于 Token 的免登录 登录成功后存储 Toke…

vue实现冰墩墩

vue实现冰墩墩

使用 Vue 实现冰墩墩动画 通过 Vue 的动画特性和 SVG 技术,可以动态渲染冰墩墩的形象。以下是具体实现方法: 准备 SVG 素材 冰墩墩的形象通常由多个 SVG 路径组成,包括身体轮廓、面…

vue组件实现

vue组件实现

Vue 组件实现基础 Vue 组件是 Vue.js 的核心特性之一,允许将 UI 拆分为独立、可复用的模块。组件的实现包括定义、注册、数据传递和生命周期管理等。 定义组件 组件可以通过单文件组件(…