当前位置:首页 > VUE

vue实现列表搜索

2026-01-19 21:54:57VUE

实现列表搜索的基本思路

在Vue中实现列表搜索功能,通常需要结合v-model绑定搜索关键词,通过计算属性或方法过滤原始数据。核心是监听输入变化并实时更新展示结果。

基础实现方法

创建Vue实例或组件,定义数据列表和搜索关键词

data() {
  return {
    searchQuery: '',
    items: [
      { id: 1, name: 'Apple' },
      { id: 2, name: 'Banana' },
      { id: 3, name: 'Orange' }
    ]
  }
}

使用计算属性实现过滤逻辑

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

模板部分绑定数据和展示结果

vue实现列表搜索

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

多字段搜索扩展

当需要搜索多个字段时,调整过滤逻辑

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

使用自定义过滤方法

对于复杂搜索逻辑,可以使用方法替代计算属性

vue实现列表搜索

methods: {
  filterItems(query) {
    return this.items.filter(item => 
      // 自定义过滤条件
    )
  }
}

添加搜索延迟优化

通过lodashdebounce减少频繁触发

import { debounce } from 'lodash'

methods: {
  search: debounce(function(query) {
    // 执行搜索
  }, 300)
}

服务器端搜索实现

当数据量较大时,建议使用后端搜索API

methods: {
  async searchItems() {
    const response = await axios.get('/api/items', {
      params: { q: this.searchQuery }
    })
    this.filteredItems = response.data
  }
}

样式和交互增强

添加加载状态和空结果提示

<div v-if="loading">Searching...</div>
<div v-else-if="filteredItems.length === 0">
  No results found
</div>

完整组件示例

<template>
  <div>
    <input 
      v-model="searchQuery" 
      @input="onSearch"
      placeholder="Search items..."
    >
    <ul v-if="!loading">
      <li v-for="item in filteredItems" :key="item.id">
        {{ item.name }} - {{ item.price }}
      </li>
    </ul>
    <p v-if="loading">Loading...</p>
    <p v-if="!loading && filteredItems.length === 0">
      No items match your search
    </p>
  </div>
</template>

<script>
export default {
  data() {
    return {
      searchQuery: '',
      loading: false,
      allItems: [],
      filteredItems: []
    }
  },
  async created() {
    this.loading = true
    this.allItems = await fetchItems()
    this.filteredItems = this.allItems
    this.loading = false
  },
  methods: {
    onSearch() {
      this.loading = true
      this.filteredItems = this.allItems.filter(item =>
        item.name.toLowerCase().includes(this.searchQuery.toLowerCase()) ||
        item.description.toLowerCase().includes(this.searchQuery.toLowerCase())
      )
      this.loading = false
    }
  }
}
</script>

标签: 列表vue
分享给朋友:

相关文章

vue如何实现放大缩小

vue如何实现放大缩小

Vue实现放大缩小功能的方法 在Vue中实现元素的放大缩小功能,可以通过CSS变换、第三方库或直接操作DOM样式来实现。以下是几种常见的方法: 使用CSS transform属性 通过绑定Vue的d…

通过vue实现

通过vue实现

Vue 实现方法 安装 Vue 确保已安装 Node.js 和 npm,通过以下命令安装 Vue CLI: npm install -g @vue/cli 创建 Vue 项目 使用 Vue CLI…

vue实现全屏

vue实现全屏

Vue 实现全屏功能的方法 在 Vue 中实现全屏功能可以通过浏览器提供的 Fullscreen API 来实现。以下是几种常见的实现方式: 使用原生 Fullscreen API 通过调用 doc…

vue插件实现

vue插件实现

Vue 插件实现方法 Vue 插件是一种向 Vue 应用程序添加全局功能的机制。插件可以包含全局指令、过滤器、混入、实例方法等。 插件的基本结构 一个 Vue 插件通常是一个对象或函数,需要暴露一个…

vue 实现排序

vue 实现排序

Vue 实现排序的方法 使用计算属性实现排序 通过计算属性对数组进行排序,可以保持原始数据不变。示例代码展示了如何对列表按名称升序排序: <template> <div>…

vue实现选择

vue实现选择

Vue 实现选择功能的方法 在 Vue 中实现选择功能可以通过多种方式完成,以下介绍几种常见的实现方法。 使用 v-model 绑定单选 通过 v-model 可以轻松实现单选功能。以下是一个简单的…