当前位置:首页 > VUE

vue实现列表搜索

2026-02-20 13:59:43VUE

Vue实现列表搜索功能

在Vue中实现列表搜索功能通常涉及以下几个核心步骤:

数据绑定与搜索输入

创建一个输入框用于接收用户搜索关键词,使用v-model实现双向绑定:

<input v-model="searchQuery" placeholder="搜索..." />

计算属性过滤列表

利用Vue的计算属性实现实时过滤,避免直接修改原始数据:

vue实现列表搜索

computed: {
  filteredList() {
    return this.originalList.filter(item => {
      return item.name.toLowerCase().includes(this.searchQuery.toLowerCase())
    })
  }
}

列表渲染

使用v-for渲染过滤后的列表:

<ul>
  <li v-for="item in filteredList" :key="item.id">
    {{ item.name }}
  </li>
</ul>

多字段搜索实现

当需要搜索多个字段时,可扩展过滤逻辑:

vue实现列表搜索

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

使用第三方库优化

对于大型数据集,可以考虑使用lodash的防抖函数优化性能:

import { debounce } from 'lodash'

methods: {
  handleSearch: debounce(function(query) {
    this.searchQuery = query
  }, 300)
}

完整组件示例

<template>
  <div>
    <input 
      v-model="searchQuery"
      @input="handleSearch($event.target.value)"
      placeholder="搜索..."
    />
    <ul>
      <li v-for="item in filteredList" :key="item.id">
        {{ item.name }} - {{ item.description }}
      </li>
    </ul>
  </div>
</template>

<script>
export default {
  data() {
    return {
      searchQuery: '',
      originalList: [
        { id: 1, name: '苹果', description: '水果' },
        { id: 2, name: '香蕉', description: '热带水果' }
      ]
    }
  },
  computed: {
    filteredList() {
      const query = this.searchQuery.toLowerCase()
      return this.originalList.filter(item => {
        return (
          item.name.toLowerCase().includes(query) ||
          item.description.toLowerCase().includes(query)
        )
      })
    }
  }
}
</script>

服务器端搜索实现

当数据量很大时,建议改为调用API进行服务器端搜索:

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

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

相关文章

vue实现下载暂停

vue实现下载暂停

Vue实现下载暂停功能 在Vue中实现下载暂停功能,通常需要结合XMLHttpRequest或Fetch API的AbortController来控制请求中断。以下是具体实现方法: 使用XMLHtt…

vue自己实现下拉导航

vue自己实现下拉导航

实现下拉导航的基本思路 在Vue中实现下拉导航,可以通过结合Vue的响应式数据和事件绑定特性来完成。主要思路是利用v-show或v-if控制下拉菜单的显示与隐藏,并通过鼠标事件或点击事件触发状态变化。…

vue datepicker 实现

vue datepicker 实现

实现 Vue Datepicker 的基本方法 在 Vue 项目中实现日期选择功能,可以使用第三方库如 vue-datepicker 或 v-calendar。以下是两种常见实现方式: 安装 vue…

vue 实现挂载

vue 实现挂载

Vue 实现挂载的基本方法 在 Vue 中,挂载是将 Vue 实例与 DOM 元素关联的过程。通过挂载,Vue 可以管理 DOM 并实现数据绑定和响应式更新。 创建 Vue 实例并挂载 const…

vue observer实现

vue observer实现

Vue Observer 实现原理 Vue 的响应式系统核心是通过 Object.defineProperty(Vue 2)或 Proxy(Vue 3)实现的 Observer 模式。以下是关键实现细…

vue 实现全屏

vue 实现全屏

Vue 实现全屏功能 在 Vue 中实现全屏功能可以通过浏览器提供的 Fullscreen API 完成。以下是一个完整的实现方案: 安装依赖(可选) 如果需要跨浏览器兼容性更好,可以安装 scr…