当前位置:首页 > VUE

vue filter实现搜索

2026-01-08 16:40:55VUE

使用 Vue 过滤器实现搜索功能

Vue 的过滤器(Filter)可以用于格式化文本,结合计算属性或方法可以实现简单的搜索功能。以下是几种实现方式:

基于计算属性的搜索

通过计算属性过滤数据列表,结合输入框实现搜索功能。

<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: 'Apple' },
        { id: 2, name: 'Banana' },
        { id: 3, name: 'Orange' }
      ]
    }
  },
  computed: {
    filteredList() {
      return this.items.filter(item => 
        item.name.toLowerCase().includes(this.searchQuery.toLowerCase())
      )
    }
  }
}
</script>

结合自定义过滤器

定义一个全局过滤器,用于格式化搜索结果的匹配部分(如高亮显示)。

// 全局过滤器
Vue.filter('highlight', function(value, query) {
  if (!query) return value
  const regex = new RegExp(query, 'gi')
  return value.replace(regex, match => `<span class="highlight">${match}</span>`)
})

在模板中使用过滤器:

<template>
  <div>
    <input v-model="searchQuery" placeholder="搜索...">
    <ul>
      <li v-for="item in filteredList" :key="item.id">
        <span v-html="$options.filters.highlight(item.name, searchQuery)" />
      </li>
    </ul>
  </div>
</template>

方法封装过滤器逻辑

将过滤逻辑封装为方法,适用于更复杂的搜索场景。

methods: {
  filterItems(items, query) {
    return items.filter(item => 
      item.name.toLowerCase().includes(query.toLowerCase()) ||
      item.description.toLowerCase().includes(query.toLowerCase())
    )
  }
}

在模板中调用:

<ul>
  <li v-for="item in filterItems(items, searchQuery)" :key="item.id">
    {{ item.name }}
  </li>
</ul>

使用 Lodash 防抖优化性能

对于高频输入的搜索框,可以使用 Lodash 的 _.debounce 减少计算频率。

import _ from 'lodash'

export default {
  data() {
    return {
      searchQuery: '',
      items: [...]
    }
  },
  computed: {
    filteredList: _.debounce(function() {
      return this.items.filter(item => 
        item.name.toLowerCase().includes(this.searchQuery.toLowerCase())
      )
    }, 300)
  }
}

多字段联合搜索

扩展计算属性,支持多个字段的联合搜索。

computed: {
  filteredList() {
    const query = this.searchQuery.toLowerCase()
    return this.items.filter(item => 
      item.name.toLowerCase().includes(query) ||
      item.category.toLowerCase().includes(query) ||
      item.tags.some(tag => tag.toLowerCase().includes(query))
    )
  }
}

以上方法可以根据实际需求组合使用。计算属性适合简单场景,自定义过滤器适合格式化显示,而方法封装和防抖优化则适用于复杂或高频搜索场景。

vue filter实现搜索

标签: vuefilter
分享给朋友:

相关文章

vue实现anchor

vue实现anchor

Vue 实现 Anchor(锚点)功能 在 Vue 中实现锚点功能可以通过多种方式完成,以下是几种常见的方法: 使用 HTML 原生锚点 HTML 原生锚点是最简单的方式,通过 <a>…

vue 实现目录

vue 实现目录

Vue 实现目录的方法 在 Vue 项目中实现目录功能,可以通过以下几种方式实现,具体取决于需求和技术栈。 使用 Vue Router 实现路由目录 Vue Router 是 Vue.js 的官方…

vue实现单词反转

vue实现单词反转

实现思路 在Vue中实现单词反转功能,可以通过多种方式完成。核心思路是利用JavaScript的字符串处理方法,将输入的单词或句子拆分为数组,反转数组后再拼接成字符串。 方法一:使用计算属性 通过…

vue实现多选div

vue实现多选div

实现多选 DIV 的基本思路 在 Vue 中实现多选 DIV 功能,可以通过以下方法实现。主要思路是利用 v-model 绑定选中状态,结合 CSS 类名动态切换样式。 数据准备与模板结构 定义一个…

vue实现多人视频

vue实现多人视频

实现多人视频通话的Vue方案 使用WebRTC技术结合Vue框架可以构建多人视频通话应用。以下是核心实现方法: 技术栈选择 Vue 2/3作为前端框架 WebRTC用于实时通信 Socket.…

vue实现打字机

vue实现打字机

Vue实现打字机效果 在Vue中实现打字机效果可以通过动态更新文本内容并添加延迟来实现。以下是几种常见的实现方法: 使用setInterval实现 <template> <di…