当前位置:首页 > VUE

vue 实现搜索

2026-02-10 08:17:40VUE

Vue 实现搜索功能的方法

基础搜索实现

在 Vue 中实现搜索功能可以通过 v-model 绑定输入框的值,并使用计算属性或方法过滤数据。

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

使用 Lodash 防抖优化性能

频繁触发搜索可能导致性能问题,可以使用 Lodash 的 debounce 方法优化。

<template>
  <input v-model="searchQuery" @input="debouncedSearch">
</template>

<script>
import _ from 'lodash'

export default {
  data() {
    return {
      searchQuery: '',
      items: []
    }
  },
  created() {
    this.debouncedSearch = _.debounce(this.doSearch, 500)
  },
  methods: {
    doSearch() {
      // 执行搜索逻辑或API调用
    }
  }
}
</script>

结合 API 请求实现远程搜索

对于大量数据,通常需要调用后端 API 实现搜索。

<template>
  <input v-model="searchQuery" @input="handleSearch">
</template>

<script>
export default {
  data() {
    return {
      searchQuery: '',
      results: []
    }
  },
  methods: {
    async handleSearch() {
      if (this.searchQuery.length < 2) return
      const response = await fetch(`/api/search?q=${this.searchQuery}`)
      this.results = await response.json()
    }
  }
}
</script>

使用 Vuex 管理搜索状态

在大型应用中,可以使用 Vuex 集中管理搜索状态。

// store.js
export default new Vuex.Store({
  state: {
    searchQuery: '',
    searchResults: []
  },
  mutations: {
    SET_SEARCH_QUERY(state, query) {
      state.searchQuery = query
    },
    SET_SEARCH_RESULTS(state, results) {
      state.searchResults = results
    }
  },
  actions: {
    async search({ commit }, query) {
      commit('SET_SEARCH_QUERY', query)
      const results = await api.search(query)
      commit('SET_SEARCH_RESULTS', results)
    }
  }
})

添加搜索建议功能

实现搜索建议可以提升用户体验。

vue 实现搜索

<template>
  <div>
    <input 
      v-model="searchQuery" 
      @input="fetchSuggestions"
      @focus="showSuggestions = true"
      @blur="hideSuggestions"
    >
    <ul v-show="showSuggestions && suggestions.length">
      <li 
        v-for="suggestion in suggestions" 
        :key="suggestion"
        @mousedown="selectSuggestion(suggestion)"
      >
        {{ suggestion }}
      </li>
    </ul>
  </div>
</template>

<script>
export default {
  data() {
    return {
      searchQuery: '',
      suggestions: [],
      showSuggestions: false
    }
  },
  methods: {
    async fetchSuggestions() {
      if (this.searchQuery.length > 1) {
        this.suggestions = await api.getSuggestions(this.searchQuery)
      }
    },
    selectSuggestion(suggestion) {
      this.searchQuery = suggestion
      this.showSuggestions = false
    },
    hideSuggestions() {
      setTimeout(() => {
        this.showSuggestions = false
      }, 200)
    }
  }
}
</script>

这些方法涵盖了 Vue 中实现搜索功能的不同场景和优化方案,可以根据具体需求选择适合的实现方式。

标签: vue
分享给朋友:

相关文章

vue请求实现进度条

vue请求实现进度条

实现请求进度条的方法 在Vue中实现请求进度条可以通过多种方式完成,常见的有使用第三方库如axios结合nprogress或自定义进度条组件。以下是几种实现方法: 使用axios和nprogress…

vue评分实现

vue评分实现

Vue 评分组件实现方法 使用第三方库(如 Element UI) 安装 Element UI: npm install element-ui 引入并注册组件: import Vue from '…

vue实现路由

vue实现路由

Vue 路由的实现方法 Vue 路由可以通过 Vue Router 库来实现,Vue Router 是 Vue.js 官方的路由管理器,用于构建单页面应用(SPA)。 安装 Vue Router 通…

vue实现发帖

vue实现发帖

使用 Vue 实现发帖功能 前端实现 创建发帖表单组件,包含标题和内容输入框,以及提交按钮。使用 v-model 绑定表单数据。 <template> <div>…

vue 实现协同

vue 实现协同

Vue 实现协同编辑的方案 协同编辑指多个用户同时编辑同一文档并实时同步更改。Vue 结合相关库和技术可轻松实现该功能。 使用 WebSocket 实现实时通信 WebSocket 提供全双工通信,…

vue实现侧导航

vue实现侧导航

Vue 实现侧边导航 使用 Vue 实现侧边导航可以通过多种方式完成,以下是一种常见的实现方法,结合 Vue Router 和动态组件。 基础结构 创建侧边导航栏的基本结构,通常使用 <ul&…