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

多字段查询

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

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

vue实现简单登录

vue实现简单登录

使用 Vue 实现简单登录功能 创建 Vue 项目 确保已安装 Vue CLI,通过以下命令创建新项目: vue create vue-login-demo 选择默认配置或手动配置(如 Babel、…

vue修改简单实现

vue修改简单实现

Vue 修改简单实现 在 Vue 中实现简单的修改操作,通常涉及数据绑定、方法调用和响应式更新。以下是几种常见场景的实现方式: 修改数据并更新视图 Vue 的响应式系统会自动追踪数据变化并更新视图。…

vue轮播图简单实现

vue轮播图简单实现

使用 Vue 实现轮播图 以下是一个基于 Vue 3 的简单轮播图实现方法,无需依赖第三方库。 基础结构 在 Vue 单文件组件中,通过 v-for 渲染图片列表,并用 CSS 控制切换效果。 &…

简单的vue实现原理

简单的vue实现原理

Vue 的实现原理 Vue 的核心实现原理主要包括响应式系统、虚拟 DOM 和模板编译。以下是这些核心概念的简要说明: 响应式系统 Vue 通过 Object.defineProperty(Vue…

简单vue状态管理实现

简单vue状态管理实现

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