当前位置:首页 > VUE

vue搜索功能代码实现

2026-02-25 03:46:27VUE

Vue 搜索功能实现方法

基础搜索功能(基于本地数据)

在 Vue 中实现搜索功能可以通过计算属性或方法过滤数组数据。

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

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

异步搜索(API请求)

对于需要从API获取搜索结果的场景,可以使用防抖技术优化性能。

<template>
  <div>
    <input 
      v-model="searchQuery" 
      @input="debouncedSearch" 
      placeholder="搜索..."
    />
    <ul v-if="searchResults.length">
      <li v-for="result in searchResults" :key="result.id">
        {{ result.title }}
      </li>
    </ul>
    <p v-else-if="isLoading">加载中...</p>
    <p v-else>暂无结果</p>
  </div>
</template>

<script>
import _ from 'lodash'

export default {
  data() {
    return {
      searchQuery: '',
      searchResults: [],
      isLoading: false
    }
  },
  created() {
    this.debouncedSearch = _.debounce(this.searchAPI, 500)
  },
  methods: {
    async searchAPI() {
      if (!this.searchQuery.trim()) {
        this.searchResults = []
        return
      }

      this.isLoading = true
      try {
        const response = await fetch(`/api/search?q=${encodeURIComponent(this.searchQuery)}`)
        this.searchResults = await response.json()
      } catch (error) {
        console.error('搜索失败:', error)
      } finally {
        this.isLoading = false
      }
    }
  }
}
</script>

高级搜索功能

实现多条件搜索可以结合多个过滤条件。

computed: {
  filteredItems() {
    return this.items.filter(item => {
      const matchesSearch = item.name.toLowerCase().includes(this.searchQuery.toLowerCase())
      const matchesCategory = this.selectedCategory ? item.category === this.selectedCategory : true
      return matchesSearch && matchesCategory
    })
  }
}

使用第三方库

对于复杂搜索需求,可以考虑使用专门搜索库如 Fuse.js。

vue搜索功能代码实现

import Fuse from 'fuse.js'

// 在组件中
methods: {
  initFuse() {
    const options = {
      keys: ['name', 'description'],
      threshold: 0.4
    }
    this.fuse = new Fuse(this.items, options)
  },
  searchWithFuse() {
    this.searchResults = this.searchQuery 
      ? this.fuse.search(this.searchQuery)
      : this.items
  }
}

性能优化技巧

对于大型数据集,考虑分页加载结果或虚拟滚动技术。可以使用 Web Worker 将搜索逻辑放到后台线程执行,避免阻塞UI。

分享给朋友:

相关文章

vue实现左右滑动代码

vue实现左右滑动代码

以下是一个基于 Vue 3 实现左右滑动功能的代码示例,结合手势识别和动画效果: 基础实现(使用 CSS 和事件监听) <template> <div class="sli…

vue代码实现清除缓存

vue代码实现清除缓存

清除浏览器缓存的方法 在Vue项目中清除缓存通常涉及版本控制、强制刷新或服务端配置。以下是几种常见实现方式: 修改文件名添加哈希 通过webpack配置在打包时为静态文件添加哈希值,确保每次更新后文…

vue 实现 代码编辑功能

vue 实现 代码编辑功能

实现代码编辑功能的基本思路 在Vue中实现代码编辑功能通常需要借助第三方库,例如Monaco Editor(VS Code使用的编辑器)或CodeMirror。以下是两种常见方案的实现方法。 使用M…

react-如何实现接口搜索功能

react-如何实现接口搜索功能

实现接口搜索功能的步骤 在React中实现接口搜索功能通常涉及以下几个关键部分:状态管理、API调用、用户输入处理和结果展示。 状态管理 使用useState来管理搜索输入和搜索结果的状态。需要定义…

css制作游戏代码

css制作游戏代码

CSS 制作游戏代码 使用纯 CSS 制作游戏虽然有一定局限性,但可以通过动画、过渡和交互选择器等实现简单的游戏效果。以下是几种常见的 CSS 游戏实现方法: 贪吃蛇游戏 通过键盘事件和 CSS 动…

CSS表单制作代码

CSS表单制作代码

CSS表单制作代码示例 以下是一个简单的CSS表单制作代码示例,包含HTML结构和CSS样式。 HTML结构 <form class="form-container"> <d…