当前位置:首页 > VUE

vue实现搜索列表

2026-03-28 13:45:31VUE

实现搜索列表功能

数据绑定与搜索逻辑

在Vue中实现搜索列表功能需要绑定输入框和列表数据,通过计算属性或方法过滤列表。

<template>
  <div>
    <input v-model="searchQuery" placeholder="搜索...">
    <ul>
      <li v-for="item in filteredList" :key="item.id">
        {{ item.name }}
      </li>
    </ul>
  </div>
</template>

<script>
export default {
  data() {
    return {
      searchQuery: '',
      items: [
        { id: 1, name: '苹果' },
        { id: 2, name: '香蕉' },
        { id: 3, name: '橙子' }
      ]
    }
  },
  computed: {
    filteredList() {
      return this.items.filter(item => 
        item.name.toLowerCase().includes(this.searchQuery.toLowerCase())
      )
    }
  }
}
</script>

使用第三方库增强搜索

对于更复杂的搜索需求,可以使用Fuse.js等模糊搜索库。

import Fuse from 'fuse.js'

export default {
  methods: {
    fuzzySearch() {
      const options = {
        keys: ['name'],
        threshold: 0.4
      }
      const fuse = new Fuse(this.items, options)
      return fuse.search(this.searchQuery)
    }
  }
}

异步搜索实现

当数据需要从API获取时,可以使用异步搜索模式。

export default {
  methods: {
    async fetchResults() {
      const response = await axios.get('/api/items', {
        params: { q: this.searchQuery }
      })
      this.items = response.data
    }
  },
  watch: {
    searchQuery(newVal) {
      if (newVal.length > 2) {
        this.fetchResults()
      }
    }
  }
}

性能优化

对于大型数据集,考虑添加防抖功能避免频繁触发搜索。

import { debounce } from 'lodash'

export default {
  created() {
    this.debouncedSearch = debounce(this.fetchResults, 500)
  },
  watch: {
    searchQuery() {
      this.debouncedSearch()
    }
  }
}

样式增强

为搜索结果添加高亮显示功能。

vue实现搜索列表

<li v-for="item in filteredList" v-html="highlight(item.name)"></li>

<script>
methods: {
  highlight(text) {
    if (!this.searchQuery) return text
    const regex = new RegExp(this.searchQuery, 'gi')
    return text.replace(regex, match => `<span class="highlight">${match}</span>`)
  }
}
</script>

<style>
.highlight {
  background-color: yellow;
  font-weight: bold;
}
</style>

标签: 列表vue
分享给朋友:

相关文章

vue实现积分

vue实现积分

Vue 实现积分功能 在 Vue 中实现积分功能通常涉及前端展示、交互逻辑以及与后端 API 的通信。以下是常见的实现方法和步骤: 积分展示组件 创建一个积分展示组件,用于显示当前用户的积分。可以使…

vue 实现递归

vue 实现递归

Vue 实现递归组件的方法 在 Vue 中实现递归组件通常用于处理树形结构数据,例如菜单、评论列表或文件目录。以下是实现递归组件的关键步骤: 定义递归组件 递归组件需要设置 name 属性,以便在模…

vue实现机制

vue实现机制

Vue 实现机制的核心原理 Vue.js 的核心实现机制主要基于响应式系统、虚拟 DOM 和组件化设计。以下是关键实现细节: 响应式系统 Vue 通过 Object.defineProperty(V…

vue实现标题

vue实现标题

Vue 实现标题的方法 在Vue中实现标题可以通过多种方式,以下是几种常见的方法: 方法一:使用模板语法 在Vue组件的模板中直接使用HTML的<h1>到<h6>标签来定义…

vue实现京东

vue实现京东

Vue 实现京东电商网站的关键步骤 项目搭建与基础配置 使用 Vue CLI 或 Vite 初始化项目,安装 Vue Router 管理路由,Vuex/Pinia 管理状态。配置基础 UI 框架如 E…

vue 实现templateurl

vue 实现templateurl

在 Vue 中,templateUrl 是 Angular 中的一个概念,用于指定外部 HTML 文件作为模板。Vue 本身不直接支持 templateUrl,但可以通过以下方法实现类似功能: 使用…