当前位置:首页 > VUE

vue简单查询功能实现

2026-02-24 07:25:05VUE

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

基于方法的查询

对于需要更复杂查询逻辑或异步数据的情况,可以使用方法:

<template>
  <div>
    <input v-model="searchQuery" @input="searchItems" placeholder="搜索...">
    <ul>
      <li v-for="item in searchResults" :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: '橙子' }
      ],
      searchResults: []
    }
  },
  methods: {
    searchItems() {
      this.searchResults = this.items.filter(item =>
        item.name.toLowerCase().includes(this.searchQuery.toLowerCase())
      )
    }
  },
  mounted() {
    this.searchResults = [...this.items]
  }
}
</script>

使用第三方库实现高级查询

对于更复杂的查询需求,可以集成第三方库如 Fuse.js:

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

<script>
import Fuse from 'fuse.js'

export default {
  data() {
    return {
      searchQuery: '',
      items: [
        { id: 1, name: '苹果' },
        { id: 2, name: '香蕉' },
        { id: 3, name: '橙子' }
      ],
      fuse: null,
      searchResults: []
    }
  },
  created() {
    this.fuse = new Fuse(this.items, {
      keys: ['name'],
      threshold: 0.4
    })
    this.searchResults = [...this.items]
  },
  watch: {
    searchQuery(newVal) {
      if (!newVal.trim()) {
        this.searchResults = [...this.items]
        return
      }
      this.searchResults = this.fuse.search(newVal).map(result => result.item)
    }
  }
}
</script>

异步数据查询

当数据来自API时,可以使用防抖技术优化性能:

<template>
  <div>
    <input v-model="searchQuery" placeholder="搜索...">
    <ul v-if="!loading">
      <li v-for="item in searchResults" :key="item.id">
        {{ item.name }}
      </li>
    </ul>
    <div v-else>加载中...</div>
  </div>
</template>

<script>
let debounceTimer

export default {
  data() {
    return {
      searchQuery: '',
      searchResults: [],
      loading: false
    }
  },
  watch: {
    searchQuery(newVal) {
      clearTimeout(debounceTimer)
      debounceTimer = setTimeout(() => {
        this.fetchSearchResults(newVal)
      }, 300)
    }
  },
  methods: {
    async fetchSearchResults(query) {
      if (!query.trim()) {
        this.searchResults = []
        return
      }
      this.loading = true
      try {
        const response = await fetch(`/api/items?q=${query}`)
        this.searchResults = await response.json()
      } catch (error) {
        console.error('搜索失败:', error)
      } finally {
        this.loading = false
      }
    }
  }
}
</script>

多字段查询

支持在多个字段中进行搜索:

vue简单查询功能实现

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

以上方法可以根据具体需求选择或组合使用,计算属性适合简单场景,方法调用适合需要更多控制的场景,第三方库适合复杂模糊搜索,异步查询适合API数据。

分享给朋友:

相关文章

vue简单功能实现

vue简单功能实现

Vue 简单功能实现示例 以下是一个基于 Vue 3 的简单计数器功能实现,包含模板、脚本和样式部分: <template> <div class="counter">…

vue简单代码实现

vue简单代码实现

以下是一个基于 Vue 3 的简单代码实现示例,包含基础功能演示: 基础模板结构 <!DOCTYPE html> <html lang="en"> <head>…

vue实现简单登录注册

vue实现简单登录注册

Vue 实现登录注册功能 项目初始化 使用 Vue CLI 创建项目 vue create auth-demo cd auth-demo 安装必要依赖 npm install axios vue-…

简单vue状态管理实现

简单vue状态管理实现

Vue 状态管理实现方法 使用 Vue 的响应式系统 Vue 的响应式系统可以轻松实现简单的状态管理。通过创建一个响应式对象,可以在多个组件之间共享状态。 // store.js import {…

vue简单实现瀑布流

vue简单实现瀑布流

vue实现瀑布流的方法 使用Vue实现瀑布流布局可以通过CSS或JavaScript库完成。以下是几种常见方法: 使用CSS columns属性 CSS columns属性可以快速实现瀑布流效果,适…

css3制作简单动画

css3制作简单动画

CSS3 制作简单动画的方法 CSS3 提供了多种方式制作动画,主要包括 transition 和 animation 两种核心方法。以下是具体实现方式: 使用 transition 实现过渡动画…