当前位置:首页 > VUE

vue实现搜索筛选

2026-01-17 05:48:14VUE

实现搜索筛选的基本思路

在Vue中实现搜索筛选功能,通常需要结合数据绑定、计算属性和事件监听。核心是通过用户输入的关键词过滤原始数据列表,动态展示匹配项。

数据准备与绑定

创建一个包含所有数据的数组和一个用于存储搜索关键词的变量。在模板中使用v-model绑定输入框与关键词变量。

vue实现搜索筛选

<template>
  <div>
    <input v-model="searchQuery" placeholder="搜索...">
    <ul>
      <li v-for="item in filteredItems" :key="item.id">{{ item.name }}</li>
    </ul>
  </div>
</template>

计算属性实现筛选

利用计算属性filteredItems动态返回符合搜索条件的数据。通过filter方法遍历原始数据,检查每一项是否包含关键词(不区分大小写)。

<script>
export default {
  data() {
    return {
      searchQuery: '',
      items: [
        { id: 1, name: '苹果' },
        { id: 2, name: '香蕉' },
        { id: 3, name: '橙子' }
      ]
    }
  },
  computed: {
    filteredItems() {
      return this.items.filter(item => 
        item.name.toLowerCase().includes(this.searchQuery.toLowerCase())
      )
    }
  }
}
</script>

多条件筛选扩展

若需支持多个字段(如名称和描述)或更复杂的条件,可扩展计算属性逻辑。例如同时匹配名称和描述字段:

vue实现搜索筛选

filteredItems() {
  const query = this.searchQuery.toLowerCase()
  return this.items.filter(item => 
    item.name.toLowerCase().includes(query) || 
    item.description.toLowerCase().includes(query)
  )
}

性能优化建议

对于大数据量场景,可考虑以下优化:

  • 添加防抖(debounce)减少频繁触发筛选
  • 使用Web Worker进行后台过滤
  • 对静态数据预先建立索引

完整示例代码

结合上述要点,一个完整的Vue单文件组件示例如下:

<template>
  <div>
    <input 
      v-model="searchQuery" 
      placeholder="输入关键词..."
      class="search-input"
    >
    <ul v-if="filteredItems.length">
      <li 
        v-for="item in filteredItems" 
        :key="item.id"
        class="item"
      >
        {{ item.name }} - {{ item.description }}
      </li>
    </ul>
    <p v-else>无匹配结果</p>
  </div>
</template>

<script>
export default {
  data() {
    return {
      searchQuery: '',
      items: [
        { id: 1, name: 'Vue', description: '渐进式JavaScript框架' },
        { id: 2, name: 'React', description: '用于构建用户界面的库' },
        { id: 3, name: 'Angular', description: '企业级前端框架' }
      ]
    }
  },
  computed: {
    filteredItems() {
      const query = this.searchQuery.toLowerCase()
      return this.items.filter(item => 
        item.name.toLowerCase().includes(query) || 
        item.description.toLowerCase().includes(query)
      )
    }
  }
}
</script>

<style>
.search-input {
  padding: 8px;
  width: 200px;
}
.item {
  padding: 4px 0;
}
</style>

标签: vue
分享给朋友:

相关文章

vue实现矩阵

vue实现矩阵

Vue 实现矩阵的方法 在 Vue 中实现矩阵操作可以通过多种方式完成,以下是一些常见的方法: 使用二维数组表示矩阵 矩阵可以用二维数组来表示,每个元素对应矩阵中的一个值。在 Vue 的 data…

vue实现视频

vue实现视频

Vue 实现视频播放的方法 在 Vue 项目中实现视频播放可以通过多种方式完成,以下是几种常见的方法: 使用 HTML5 的 <video> 标签 在 Vue 组件中直接使用 HTML…

vue ref实现

vue ref实现

Vue 中 ref 的实现 在 Vue 中,ref 是一个用于创建响应式引用的 API,适用于基本类型和对象。以下是 ref 的核心实现原理和使用方法。 基本实现原理 ref 通过 Reactive…

vue实现系统

vue实现系统

Vue 实现系统的核心方法 使用 Vue.js 构建系统时,需结合其响应式特性与组件化开发模式。以下为关键实现路径: 项目初始化与工程配置 通过 Vue CLI 或 Vite 创建项目骨架,推荐选择…

vue实现popper

vue实现popper

Vue 实现 Popper 的方法 使用 Tippy.js 库 Tippy.js 是一个轻量级的 Popper.js 封装库,提供丰富的工具提示功能。安装 Tippy.js 及其 Vue 封装: n…

vue实现白板

vue实现白板

Vue实现白板功能 使用Vue实现白板功能可以通过HTML5的Canvas API结合Vue的响应式特性来完成。以下是实现白板功能的关键步骤: 安装依赖 在Vue项目中安装必要的依赖,如vue-dr…