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

分享给朋友:

相关文章

php搜索功能实现的

php搜索功能实现的

PHP 搜索功能实现方法 数据库搜索实现 使用 SQL 的 LIKE 语句进行模糊匹配,适用于小型网站和简单搜索需求。 $searchTerm = $_GET['search']; $query =…

vue实现代码

vue实现代码

以下是Vue实现常见功能的代码示例,涵盖基础语法、组件通信、状态管理等核心内容: 基础模板语法 <template> <div> <h1>{{ mes…

vue抽奖代码实现

vue抽奖代码实现

Vue 抽奖代码实现 基础抽奖组件结构 使用 Vue 3 的 Composition API 实现抽奖功能,核心包括转盘动画、奖品列表和抽奖逻辑。以下为组件基础结构: <template>…

vue代码核心实现

vue代码核心实现

Vue 核心实现原理 Vue.js 的核心实现主要包括响应式系统、虚拟 DOM、模板编译和组件化机制。以下是关键实现要点: 响应式系统 通过 Object.defineProperty(Vue 2)…

vue实现登录代码

vue实现登录代码

以下是一个基于 Vue.js 的登录功能实现示例,包含表单验证和异步请求处理: 基础组件结构 <template> <div class="login-container"&g…

vue代码抛硬币实现

vue代码抛硬币实现

实现思路 使用Vue.js实现抛硬币功能,可以通过随机生成0或1来模拟硬币的正反面,并通过动画效果增强用户体验。以下是具体实现步骤。 代码实现 创建一个Vue组件,包含一个按钮用于触发抛硬币动作…