当前位置:首页 > 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.js 最新版本: npm install vue@latest 创建 Vue 实例: import { createApp } from 'vue' cons…

vue简单代码实现

vue简单代码实现

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

vue 实现查询功能

vue 实现查询功能

Vue 实现查询功能的方法 在Vue中实现查询功能通常需要结合数据绑定、事件处理和过滤逻辑。以下是几种常见的实现方式: 基础数据过滤 使用v-model绑定输入框,配合计算属性实现实时过滤:…

vue怎么实现简单登录

vue怎么实现简单登录

Vue实现简单登录功能 使用Vue 2或Vue 3均可实现基础登录逻辑,以下是关键实现步骤: 创建登录表单组件 在Login.vue中设置用户名和密码输入框,绑定v-model数据: <te…

vue实现点击查询功能

vue实现点击查询功能

实现点击查询功能的基本步骤 在Vue中实现点击查询功能通常涉及以下几个关键部分:数据绑定、事件监听、API调用和结果展示。 模板部分 在Vue模板中添加一个输入框和查询按钮,使用v-model绑定查…

react 简单table实现

react 简单table实现

基础表格实现 使用 React 实现简单表格可以通过原生 HTML 的 <table> 标签结合动态数据渲染完成。以下是一个基础示例,展示如何通过数组数据动态生成表格内容: impo…