当前位置:首页 > VUE

vue搜索功能实现

2026-02-10 18:29:44VUE

Vue 搜索功能实现

基本搜索功能实现

在 Vue 中实现搜索功能通常需要结合 v-model 和计算属性(computed)或方法(methods)来过滤数据。以下是一个简单的示例:

<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>

使用 Lodash 进行防抖优化

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

vue搜索功能实现

import debounce from 'lodash/debounce';

export default {
  data() {
    return {
      searchQuery: '',
      items: [],
      debouncedSearch: null
    };
  },
  created() {
    this.debouncedSearch = debounce(this.searchItems, 300);
  },
  methods: {
    searchItems() {
      // 调用 API 或过滤本地数据
    }
  },
  watch: {
    searchQuery() {
      this.debouncedSearch();
    }
  }
};

结合 API 请求实现远程搜索

如果需要从后端获取搜索结果,可以使用 axios 或其他 HTTP 客户端:

export default {
  methods: {
    async searchItems() {
      try {
        const response = await axios.get('/api/items', {
          params: { search: this.searchQuery }
        });
        this.items = response.data;
      } catch (error) {
        console.error(error);
      }
    }
  }
};

高级搜索功能

对于更复杂的搜索需求,可以结合多个条件:

vue搜索功能实现

computed: {
  filteredItems() {
    return this.items.filter(item => {
      const matchesSearch = item.name.toLowerCase().includes(this.searchQuery.toLowerCase());
      const matchesCategory = this.selectedCategory ? item.category === this.selectedCategory : true;
      return matchesSearch && matchesCategory;
    });
  }
}

使用 Vuex 管理搜索状态

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

// store.js
export default new Vuex.Store({
  state: {
    searchQuery: '',
    items: []
  },
  getters: {
    filteredItems: state => {
      return state.items.filter(item =>
        item.name.toLowerCase().includes(state.searchQuery.toLowerCase())
      );
    }
  },
  mutations: {
    setSearchQuery(state, query) {
      state.searchQuery = query;
    }
  }
});

使用第三方搜索库

对于更专业的搜索需求,可以考虑集成第三方库如 Fuse.js

import Fuse from 'fuse.js';

export default {
  data() {
    return {
      fuse: null,
      searchQuery: '',
      items: []
    };
  },
  mounted() {
    this.fuse = new Fuse(this.items, {
      keys: ['name', 'description'],
      threshold: 0.3
    });
  },
  computed: {
    searchResults() {
      return this.searchQuery ? this.fuse.search(this.searchQuery) : this.items;
    }
  }
};

这些方法可以根据具体需求进行组合和调整,实现从简单到复杂的各种搜索功能。

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

相关文章

vue实现计时

vue实现计时

Vue 实现计时功能 在 Vue 中实现计时功能可以通过多种方式完成,以下是几种常见的方法: 使用 setInterval 实现基础计时器 通过 setInterval 和 clearInterva…

vue全选实现

vue全选实现

Vue 全选实现方法 在 Vue 中实现全选功能通常涉及数据绑定和事件处理。以下是几种常见的实现方式: 基础实现方式 <template> <div> <…

vue原理实现

vue原理实现

Vue 原理实现的核心机制 Vue.js 的核心原理基于响应式系统、虚拟 DOM 和模板编译。以下是其核心实现机制的分解: 响应式系统 Vue 使用 Object.defineProperty(Vu…

vue实现driver

vue实现driver

Vue 实现 Driver.js 引导功能 Driver.js 是一个轻量级的 JavaScript 库,用于在网页上创建引导式导览。以下是在 Vue 项目中集成 Driver.js 的详细方法:…

vue实现ssr

vue实现ssr

Vue 实现 SSR(服务端渲染) Vue 的服务端渲染(SSR)允许在服务器端生成完整的 HTML 内容,再发送到客户端,提升首屏加载速度和 SEO 友好性。以下是实现 Vue SSR 的关键步骤和…

vue toast实现

vue toast实现

Vue Toast 实现方法 使用第三方库(推荐) 安装 vue-toastification 库,这是一个功能丰富且轻量级的 Vue Toast 插件。 npm install vue-toast…