当前位置:首页 > 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实现搜索

// 全局过滤器
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>

方法封装过滤器逻辑

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

vue filter实现搜索

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

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

标签: vuefilter
分享给朋友:

相关文章

vue实现画图

vue实现画图

Vue 实现画图功能 在 Vue 中实现画图功能通常需要结合 HTML5 的 <canvas> 元素或第三方库。以下是几种常见的方法: 使用原生 Canvas API 通过 Vue 直…

vue实现xterm

vue实现xterm

在 Vue 中集成 Xterm.js Xterm.js 是一个基于 TypeScript 的前端终端组件库,可用于在浏览器中实现终端功能。以下是在 Vue 项目中集成 Xterm.js 的详细步骤。…

vue实现选人

vue实现选人

实现选人功能的基本思路 在Vue中实现选人功能通常涉及以下核心环节:数据绑定、用户交互处理、状态管理以及界面渲染。以下是具体实现方法: 数据准备与组件结构 创建包含人员信息的数组,通常从API获取或…

vue 实现循环

vue 实现循环

Vue 实现循环的方法 在 Vue 中,可以使用 v-for 指令来实现循环渲染列表数据。以下是几种常见的循环实现方式: 基本数组循环 <template> <ul>…

vue实现treetable

vue实现treetable

Vue实现TreeTable的方法 使用第三方组件库(如Element UI) Element UI的el-table组件支持树形表格展示,通过设置row-key和tree-props属性即可实现。…

vue实现卡片

vue实现卡片

Vue 实现卡片组件的方法 使用 Vue 实现卡片组件可以通过多种方式完成,以下是几种常见的实现方法: 使用原生 HTML 和 CSS 在 Vue 单文件组件中,可以通过模板和样式直接实现卡片效果…