当前位置:首页 > VUE

vue 实现搜索

2026-03-27 17:54:58VUE

Vue 实现搜索功能的方法

使用 v-model 绑定输入框

在 Vue 中,可以通过 v-model 双向绑定输入框的值,实时监听用户的输入。
创建一个数据属性 searchQuery 来存储搜索关键词:

data() {
  return {
    searchQuery: '',
    items: [] // 原始数据列表
  }
}

模板部分:

vue 实现搜索

<input v-model="searchQuery" placeholder="输入关键词搜索">

计算属性过滤数据

利用计算属性 computed 动态过滤数据,避免每次输入都重新计算。
根据 searchQuery 过滤 items 列表:

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

使用 watch 监听搜索词

如果需要在搜索时触发异步操作(如 API 请求),可以使用 watch 监听 searchQuery 的变化:

vue 实现搜索

watch: {
  searchQuery(newVal) {
    if (newVal.length > 2) { // 避免频繁请求
      this.fetchSearchResults(newVal)
    }
  }
},
methods: {
  async fetchSearchResults(query) {
    const response = await axios.get(`/api/search?q=${query}`)
    this.items = response.data
  }
}

防抖优化性能

通过 Lodash 的 debounce 减少频繁搜索的请求次数:

import { debounce } from 'lodash'

methods: {
  fetchSearchResults: debounce(function(query) {
    // API 请求逻辑
  }, 500) // 延迟 500ms
}

显示搜索结果

在模板中渲染过滤后的列表:

<ul v-if="filteredItems.length">
  <li v-for="item in filteredItems" :key="item.id">
    {{ item.name }}
  </li>
</ul>
<p v-else>暂无结果</p>

完整示例代码

<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: 'Apple' },
        { id: 2, name: 'Banana' }
      ]
    }
  },
  computed: {
    filteredItems() {
      return this.items.filter(item =>
        item.name.toLowerCase().includes(this.searchQuery.toLowerCase())
      )
    }
  }
}
</script>

标签: vue
分享给朋友:

相关文章

vue实现引导

vue实现引导

Vue 实现引导功能的方法 使用第三方库 推荐使用 driver.js 或 intro.js 这类专门为 Vue 设计的引导库。这些库提供了完整的 API 和样式,能够快速实现引导功能。 安装 dr…

vue ref实现

vue ref实现

Vue 中 ref 的实现 在 Vue 中,ref 是一个用于创建响应式引用的 API,适用于基本类型和对象。以下是 ref 的核心实现原理和使用方法。 基本实现原理 ref 通过 Reactive…

vue实现树形

vue实现树形

Vue 实现树形组件 在 Vue 中实现树形结构通常需要递归组件和动态数据绑定。以下是实现树形组件的几种常见方法。 递归组件实现 递归组件是 Vue 中实现树形结构的核心方法。通过组件调用自身,可以…

vue  实现分页

vue 实现分页

实现分页的基本思路 在Vue中实现分页通常需要结合后端API返回的数据和前端的分页组件。分页的核心逻辑包括计算总页数、处理当前页码变化以及触发数据请求。 分页组件示例 使用Element UI的分页…

vue路由实现iframe

vue路由实现iframe

在Vue中实现iframe嵌入可以通过路由配置和组件动态加载来完成。以下是具体实现方法: 路由配置 在Vue Router的路由配置中,通过component属性动态加载iframe组件。需要将目标…

vue实现扫码

vue实现扫码

Vue 实现扫码功能 使用 vue-qrcode-reader 库 安装 vue-qrcode-reader 库: npm install vue-qrcode-reader 在 Vue 组件中引入…