当前位置:首页 > VUE

vue 搜索框功能实现

2026-02-24 22:40:40VUE

实现 Vue 搜索框功能

在 Vue 中实现搜索框功能通常涉及数据绑定、事件监听和过滤逻辑。以下是具体实现方法:

基础实现(基于本地数据)

  1. 模板部分
    使用 v-model 绑定搜索输入框的值,监听输入事件触发搜索:

    <template>
      <div>
        <input 
          type="text" 
          v-model="searchQuery" 
          placeholder="搜索..."
          @input="handleSearch"
        />
        <ul>
          <li v-for="item in filteredItems" :key="item.id">
            {{ item.name }}
          </li>
        </ul>
      </div>
    </template>
  2. 脚本部分
    定义搜索逻辑,通过计算属性过滤数据:

    <script>
    export default {
      data() {
        return {
          searchQuery: '',
          items: [
            { id: 1, name: 'Apple' },
            { id: 2, name: 'Banana' },
            { id: 3, name: 'Orange' }
          ]
        }
      },
      computed: {
        filteredItems() {
          return this.items.filter(item =>
            item.name.toLowerCase().includes(this.searchQuery.toLowerCase())
          )
        }
      },
      methods: {
        handleSearch() {
          // 可在此处添加防抖逻辑
        }
      }
    }
    </script>

高级优化方案

防抖处理
避免频繁触发搜索逻辑,使用 Lodash 的 debounce 或手动实现:

<script>
import { debounce } from 'lodash';

export default {
  methods: {
    handleSearch: debounce(function() {
      // 搜索逻辑
    }, 500)
  }
}
</script>

异步搜索(API 请求)
结合 Axios 实现远程搜索:

<script>
import axios from 'axios';

export default {
  methods: {
    async handleSearch() {
      try {
        const response = await axios.get('/api/search', {
          params: { q: this.searchQuery }
        })
        this.filteredItems = response.data
      } catch (error) {
        console.error(error)
      }
    }
  }
}
</script>

样式与交互增强

  1. 添加加载状态
    在异步搜索时显示加载指示器:

    <template>
      <div>
        <input v-model="searchQuery" @input="handleSearch" />
        <span v-if="isLoading">加载中...</span>
      </div>
    </template>
  2. 键盘事件支持
    监听回车键触发搜索:

    <input 
      @keyup.enter="handleSearch"
    />

完整组件示例

<template>
  <div class="search-container">
    <input
      v-model="searchQuery"
      @input="handleSearch"
      @keyup.enter="handleSearch"
      placeholder="输入关键词"
    />
    <div v-if="isLoading" class="loading">搜索中...</div>
    <ul v-else>
      <li v-for="result in results" :key="result.id">
        {{ result.text }}
      </li>
    </ul>
  </div>
</template>

<script>
export default {
  data() {
    return {
      searchQuery: '',
      results: [],
      isLoading: false
    }
  },
  methods: {
    async handleSearch() {
      if (this.searchQuery.trim() === '') {
        this.results = []
        return
      }

      this.isLoading = true
      try {
        const response = await fetch(`/api/search?q=${encodeURIComponent(this.searchQuery)}`)
        this.results = await response.json()
      } catch (error) {
        console.error('搜索失败:', error)
      } finally {
        this.isLoading = false
      }
    }
  }
}
</script>

<style>
.search-container {
  max-width: 600px;
  margin: 0 auto;
}
.loading {
  color: #666;
  padding: 10px;
}
</style>

通过以上方法,可以灵活实现不同复杂度的搜索功能,适用于本地数据过滤或远程 API 搜索场景。

vue 搜索框功能实现

标签: 功能vue
分享给朋友:

相关文章

vue实现缩放

vue实现缩放

Vue 实现缩放的方法 在 Vue 中实现缩放功能可以通过多种方式完成,以下是一些常见的方法: 使用 CSS transform 属性 通过 CSS 的 transform: scale() 属性可…

jq 实现 vue

jq 实现 vue

jq 实现 Vue 的核心功能 jq 是一个轻量级的 JavaScript 库,主要用于 DOM 操作和事件处理。虽然它不能完全替代 Vue,但可以通过一些技巧模拟 Vue 的核心功能,如数据绑定、事…

vue实现骰子

vue实现骰子

Vue 实现骰子功能 创建 Vue 组件 在 Vue 项目中创建一个骰子组件,例如 Dice.vue。该组件包含骰子的外观和逻辑。 <template> <div class=…

vue 组件实现

vue 组件实现

Vue 组件实现方法 单文件组件 (SFC) 使用 .vue 文件格式,包含模板、脚本和样式三部分: <template> <div class="example">{{…

vue实现mui

vue实现mui

使用 Vue 实现 MUI(Material-UI)风格的界面 Vue 本身不直接提供 MUI(Material Design)组件,但可以通过集成第三方库或手动实现来达到类似效果。以下是几种常见方法…

vue环境实现

vue环境实现

Vue 环境搭建 安装 Node.js 和 npm Node.js 是运行 Vue 的基础环境,npm 是包管理工具。从 Node.js 官网 下载并安装最新稳定版本。安装完成后,在终端运行以下命令验…