当前位置:首页 > 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 实现选择季度的几种方法 使用下拉选择框(Select) 在 Vue 中可以通过 v-model 绑定一个下拉选择框来实现季度选择。数据可以预先定义为一个包含季度选项的数组。 <tem…

vue实现适老化样式

vue实现适老化样式

Vue 实现适老化样式的关键方法 全局字体与字号调整 通过 CSS 变量或主题配置统一放大基础字号,建议正文不小于 18px,标题更大。在 App.vue 中设置全局样式: :root { --…

vue如何实现到期提醒

vue如何实现到期提醒

实现 Vue 到期提醒功能 使用计算属性计算剩余时间 在 Vue 组件中定义一个计算属性,计算目标日期与当前日期的差值。通过 Date 对象获取时间戳并计算剩余天数或小时数。 computed:…

vue设计与实现 书

vue设计与实现 书

vue设计与实现 书 《Vue.js设计与实现》是一本深入探讨Vue.js框架内部原理和设计思想的书籍,适合希望深入理解Vue.js的开发者。以下是关于这本书的详细信息: 书籍内容 《Vue…

vue实现关键词轮播

vue实现关键词轮播

Vue 实现关键词轮播 基础实现方案 使用 Vue 的 v-for 和 setInterval 实现基础轮播效果: <template> <div class="keyword…

vue 实现blog

vue 实现blog

Vue 实现博客的基本步骤 使用 Vue 实现博客可以分为前端和后端两部分,前端使用 Vue.js 框架,后端可以选择 Node.js、Python 或其他服务端语言。以下是一个基于 Vue 的博客实…