当前位置:首页 > VUE

vue 实现搜索

2026-01-13 01:00:06VUE

Vue 实现搜索功能

基础搜索实现

在 Vue 中实现搜索功能通常需要结合 v-model 和计算属性或方法过滤数据。以下是一个基础实现示例:

vue 实现搜索

<template>
  <div>
    <input v-model="searchQuery" placeholder="Search..." />
    <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>

异步搜索实现

对于需要从API获取搜索结果的场景,可以使用 watchmethods 配合防抖:

vue 实现搜索

<template>
  <div>
    <input v-model="searchQuery" placeholder="Search..." />
    <ul v-if="results.length">
      <li v-for="result in results" :key="result.id">
        {{ result.title }}
      </li>
    </ul>
    <p v-else>No results found</p>
  </div>
</template>

<script>
import _ from 'lodash'

export default {
  data() {
    return {
      searchQuery: '',
      results: []
    }
  },
  watch: {
    searchQuery: _.debounce(function(newVal) {
      if (newVal.length > 2) {
        this.searchAPI(newVal)
      }
    }, 500)
  },
  methods: {
    async searchAPI(query) {
      try {
        const response = await fetch(`https://api.example.com/search?q=${query}`)
        this.results = await response.json()
      } catch (error) {
        console.error(error)
      }
    }
  }
}
</script>

高级搜索功能

实现多条件搜索可以结合多个输入字段和更复杂的过滤逻辑:

<template>
  <div>
    <input v-model="filters.name" placeholder="Name" />
    <select v-model="filters.category">
      <option value="">All Categories</option>
      <option value="fruit">Fruit</option>
      <option value="vegetable">Vegetable</option>
    </select>

    <ul>
      <li v-for="item in filteredItems" :key="item.id">
        {{ item.name }} ({{ item.category }})
      </li>
    </ul>
  </div>
</template>

<script>
export default {
  data() {
    return {
      filters: {
        name: '',
        category: ''
      },
      items: [
        { id: 1, name: 'Apple', category: 'fruit' },
        { id: 2, name: 'Carrot', category: 'vegetable' },
        { id: 3, name: 'Orange', category: 'fruit' }
      ]
    }
  },
  computed: {
    filteredItems() {
      return this.items.filter(item => {
        const nameMatch = item.name.toLowerCase().includes(
          this.filters.name.toLowerCase()
        )
        const categoryMatch = !this.filters.category || 
          item.category === this.filters.category
        return nameMatch && categoryMatch
      })
    }
  }
}
</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, state }) {
      if (state.searchQuery.length > 2) {
        const response = await fetch(`/api/search?q=${state.searchQuery}`)
        commit('SET_SEARCH_RESULTS', await response.json())
      }
    }
  }
})

组件中使用Vuex搜索

<template>
  <div>
    <input 
      v-model="searchQuery" 
      @input="updateSearch"
      placeholder="Search..."
    />
    <ul>
      <li v-for="result in searchResults" :key="result.id">
        {{ result.name }}
      </li>
    </ul>
  </div>
</template>

<script>
import { mapState, mapActions } from 'vuex'

export default {
  computed: {
    ...mapState(['searchResults']),
    searchQuery: {
      get() {
        return this.$store.state.searchQuery
      },
      set(value) {
        this.$store.commit('SET_SEARCH_QUERY', value)
      }
    }
  },
  methods: {
    ...mapActions(['search']),
    updateSearch() {
      this.search()
    }
  }
}
</script>

这些方法涵盖了从基础到高级的Vue搜索实现,可以根据具体需求选择合适的方案。

标签: vue
分享给朋友:

相关文章

vue实现方法

vue实现方法

Vue 实现方法 Vue 是一种流行的前端框架,用于构建用户界面和单页应用。以下是几种常见的 Vue 实现方法: 创建 Vue 实例 通过 new Vue() 创建一个 Vue 实例,传入配置对象,…

vue的实现

vue的实现

Vue 的实现原理 Vue 是一个渐进式 JavaScript 框架,其核心实现主要包括响应式系统、虚拟 DOM、模板编译和组件化机制。以下是 Vue 实现的主要技术细节。 响应式系统 Vue 的响…

vue实现keepalive

vue实现keepalive

Vue 中实现 keep-alive 在 Vue 中,keep-alive 是一个内置组件,用于缓存动态组件或组件的状态,避免重复渲染和销毁。以下是实现 keep-alive 的几种方法: 基本用法…

vue实现计数

vue实现计数

Vue 实现计数功能 在 Vue 中实现计数功能可以通过多种方式完成,以下是几种常见的方法: 使用 Vue 数据绑定和事件监听 通过 Vue 的数据绑定和事件监听,可以轻松实现计数功能。以下是一个简…

vue框架实现CRM

vue框架实现CRM

Vue框架实现CRM系统 使用Vue框架构建CRM(客户关系管理)系统需要结合前端技术栈和后端API。以下为关键实现方法: 技术选型 核心框架:Vue 3(Composition API) UI组件…

vue实现登录认证

vue实现登录认证

Vue 登录认证实现方法 使用 Vue Router 和 Vuex 管理登录状态 在 Vue 项目中,通常使用 Vue Router 进行路由管理,Vuex 进行状态管理。登录认证的核心是验证用户身份…