当前位置:首页 > VUE

vue实现匹配搜索功能

2026-01-20 00:39:23VUE

实现搜索功能的基本思路

在Vue中实现搜索功能通常需要结合v-model绑定输入框数据,并通过计算属性或方法对数据进行过滤匹配。核心逻辑包括监听用户输入、过滤数据列表以及实时渲染结果。

使用计算属性实现搜索

通过计算属性可以高效地对数据列表进行过滤,利用filterincludes方法匹配关键词:

vue实现匹配搜索功能

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

使用watch实现异步搜索

如果需要从API异步获取搜索结果,可以使用watch监听搜索词变化:

export default {
  data() {
    return {
      searchQuery: '',
      searchResults: []
    }
  },
  watch: {
    searchQuery(newVal) {
      if (newVal.length > 2) { // 避免频繁请求
        this.debouncedSearch()
      }
    }
  },
  created() {
    this.debouncedSearch = _.debounce(this.fetchResults, 500) // Lodash防抖
  },
  methods: {
    fetchResults() {
      axios.get('/api/search', { params: { q: this.searchQuery } })
        .then(response => {
          this.searchResults = response.data
        })
    }
  }
}

高级搜索功能实现

对于复杂搜索需求,可以结合正则表达式或多字段匹配:

vue实现匹配搜索功能

computed: {
  filteredItems() {
    const query = this.searchQuery.toLowerCase()
    return this.items.filter(item => 
      item.name.toLowerCase().includes(query) || 
      item.description.toLowerCase().includes(query)
    )
  }
}

搜索高亮显示

使用自定义指令或组件实现搜索关键词高亮:

Vue.directive('highlight', {
  inserted(el, binding) {
    const text = el.textContent
    const query = binding.value
    if (query) {
      const regex = new RegExp(query, 'gi')
      el.innerHTML = text.replace(regex, match => 
        `<span style="background-color: yellow">${match}</span>`
      )
    }
  }
})

在模板中使用:

<li v-for="item in filteredItems" :key="item.id" v-highlight="searchQuery">
  {{ item.name }}
</li>

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

相关文章

vue实现文字播放栏

vue实现文字播放栏

Vue 实现文字播放栏(跑马灯效果) 方法一:使用 CSS 动画 + Vue 数据绑定 通过 CSS 的 @keyframes 实现动画效果,结合 Vue 的动态数据绑定控制内容。 <tem…

vue实现按卡片轮播

vue实现按卡片轮播

实现卡片轮播的基本思路 在Vue中实现卡片轮播可以通过结合v-for指令和动态样式绑定完成。核心是维护一个当前显示卡片的索引,通过CSS过渡效果实现平滑切换。 基础实现步骤 模板部分 使用v-fo…

vue实现录音文件播放

vue实现录音文件播放

使用 Vue 实现录音文件播放 准备工作 确保项目中已安装必要的依赖,如 vue-audio-recorder 或原生 Web Audio API。录音文件播放通常涉及录音、存储和播放三个核心环节。…

vue实现一个系统

vue实现一个系统

Vue 系统实现步骤 项目初始化与配置 使用 Vue CLI 或 Vite 创建项目: npm init vue@latest my-system 选择需要的配置(Router、Pinia 等)。…

vue实现矩阵

vue实现矩阵

Vue 实现矩阵的方法 在 Vue 中实现矩阵操作可以通过多种方式完成,以下是一些常见的方法: 使用二维数组表示矩阵 矩阵可以用二维数组来表示,每个元素对应矩阵中的一个值。在 Vue 的 data…

vue实现积分

vue实现积分

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