当前位置:首页 > 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)
    )
  }
}

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

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

使用自定义过滤方法

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

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

样式和交互增强

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

vue实现列表搜索

<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 的响应式系统基于 Object.defineProperty(Vue 2.x)或 Proxy(Vue 3.x)实现,通过数据劫持和依赖收集实现数据变化时的自动更新。…

vue实现付款

vue实现付款

Vue 实现付款功能 在 Vue 中实现付款功能通常需要集成第三方支付网关(如支付宝、微信支付、Stripe 等)。以下是常见的实现方法: 集成支付宝/微信支付 安装必要的依赖(如 axios 用于…

vue 实现pc

vue 实现pc

Vue 实现 PC 端应用的核心要点 Vue.js 是一个渐进式框架,适合构建 PC 端单页应用(SPA)或复杂的前端界面。以下是实现 PC 端应用的关键方法和注意事项: 项目初始化与工程化配置 使…

vue实现triger

vue实现triger

在Vue中实现触发器(trigger)功能通常涉及自定义事件或DOM事件触发。以下是几种常见场景的实现方法: 自定义事件触发 通过$emit方法触发父组件中监听的自定义事件: // 子组件 thi…

vue实现过程

vue实现过程

Vue 的实现过程 Vue 的实现过程可以分为多个核心模块,包括响应式系统、虚拟 DOM、模板编译等。以下是 Vue 的主要实现过程分析。 响应式系统 Vue 的响应式系统基于 Object.def…

vue实现input

vue实现input

Vue 实现 Input 输入框的方法 基本双向绑定 使用 v-model 指令实现双向数据绑定,适用于大多数表单场景: <template> <input v-model="…