当前位置:首页 > VUE

vue实现搜索筛选

2026-03-29 22:36:09VUE

实现搜索筛选的基本思路

在Vue中实现搜索筛选功能通常需要结合v-model绑定输入框数据,通过计算属性或方法动态过滤列表数据。核心逻辑包括数据绑定、过滤条件和渲染展示。

数据准备与绑定

  1. 定义数据 在Vue组件的data中初始化列表数据和搜索关键词:

    data() {
      return {
        searchQuery: '',
        items: [
          { id: 1, name: 'Apple', category: 'Fruit' },
          { id: 2, name: 'Carrot', category: 'Vegetable' }
        ]
      }
    }
  2. 绑定输入框 使用v-model实现双向绑定:

    <input v-model="searchQuery" placeholder="Search...">

实现筛选逻辑

  1. 计算属性过滤 通过computed属性动态计算筛选结果,避免直接修改原数据:

    computed: {
      filteredItems() {
        return this.items.filter(item => 
          item.name.toLowerCase().includes(this.searchQuery.toLowerCase())
        )
      }
    }
  2. 多条件筛选 若需支持多字段筛选,可扩展过滤逻辑:

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

渲染筛选结果

  1. 列表渲染 使用v-for绑定计算后的结果:

    <ul>
      <li v-for="item in filteredItems" :key="item.id">
        {{ item.name }} ({{ item.category }})
      </li>
    </ul>
  2. 空状态处理 添加无结果时的提示:

    <p v-if="filteredItems.length === 0">No matching items found.</p>

高级优化

  1. 防抖处理 通过lodash.debounce减少频繁触发:

    methods: {
      handleSearch: _.debounce(function(query) {
        this.searchQuery = query
      }, 300)
    }
  2. 分页支持 结合分页组件控制显示范围:

    vue实现搜索筛选

    computed: {
      paginatedItems() {
        const start = (this.currentPage - 1) * this.pageSize
        return this.filteredItems.slice(start, start + this.pageSize)
      }
    }

完整示例代码

<template>
  <div>
    <input 
      v-model="searchQuery" 
      placeholder="Search by name or category"
    >
    <ul v-if="filteredItems.length">
      <li v-for="item in filteredItems" :key="item.id">
        {{ item.name }} - {{ item.category }}
      </li>
    </ul>
    <p v-else>No results found.</p>
  </div>
</template>

<script>
export default {
  data() {
    return {
      searchQuery: '',
      items: [
        /* 原始数据 */
      ]
    }
  },
  computed: {
    filteredItems() {
      const query = this.searchQuery.toLowerCase()
      return this.items.filter(item =>
        item.name.toLowerCase().includes(query) ||
        item.category.toLowerCase().includes(query)
      )
    }
  }
}
</script>

标签: vue
分享给朋友:

相关文章

vue实现tab换行

vue实现tab换行

Vue实现Tab切换的常见方法 使用Vue实现Tab切换功能可以通过多种方式完成,以下是几种常见的方法: 动态组件结合v-if或v-show 通过v-if或v-show控制不同Tab内容的显示与隐…

vue实现分类

vue实现分类

Vue实现分类功能的方法 使用v-for和计算属性 通过计算属性对数据进行分类处理,结合v-for渲染分类后的列表。示例代码: <template> <div>…

vue实现动态

vue实现动态

Vue 实现动态路由的方法 在 Vue 中实现动态路由通常涉及以下几个关键步骤: 使用 Vue Router 的动态路由匹配 通过 Vue Router 的 :param 语法可以实现动态路由匹配。…

vue 实现折叠

vue 实现折叠

Vue 实现折叠功能的方法 在 Vue 中实现折叠功能可以通过多种方式完成,以下是几种常见的实现方法: 使用 v-if 或 v-show 控制显示隐藏 通过绑定一个布尔值变量,结合 v-if 或 v…

vue 实现音乐

vue 实现音乐

Vue 实现音乐播放功能 在 Vue 中实现音乐播放功能,可以通过 HTML5 的 <audio> 元素或第三方库如 howler.js 来实现。以下是两种方法的详细步骤: 使用 HTM…

vue分页实现

vue分页实现

实现Vue分页的几种方法 使用Element UI的分页组件 安装Element UI库后,可以直接使用其分页组件。以下是一个基本示例: <template> <div>…