当前位置:首页 > 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 中实现文字显示可以通过多种方式,包括插值表达式、指令、组件等。以下是几种常见的实现方法: 插值表达式 使用双大括号 {{ }} 进行文本插值,这是 Vue…

vue实现浮标

vue实现浮标

Vue 实现浮动按钮(浮标) 使用 Vue 实现浮动按钮可以通过多种方式完成,以下是几种常见的方法: 使用 CSS 定位和 Vue 组件 创建 Vue 组件并配合 CSS 固定定位实现浮动按钮:…

vue实现tree

vue实现tree

Vue 实现 Tree 组件 使用 Vue 实现 Tree 组件可以通过递归组件的方式来实现层级结构展示。以下是一个完整的实现方法: 基础递归组件实现 创建 Tree 组件文件 Tree.vue,使…

vue导航实现

vue导航实现

Vue 导航实现方法 在 Vue 中实现导航功能通常涉及路由配置、组件设计和状态管理。以下是几种常见的实现方式: 使用 Vue Router 实现基础导航 安装 Vue Router: npm i…

vue远离实现

vue远离实现

Vue 原理实现 Vue.js 的核心原理包括响应式系统、虚拟 DOM、模板编译和组件化机制。以下是其关键实现原理的详细解析。 响应式系统 Vue 的响应式系统基于 Object.definePro…

vue实现接口轮询

vue实现接口轮询

实现接口轮询的基本方法 在Vue中实现接口轮询通常通过setInterval或setTimeout结合异步请求完成。以下是一个基础实现示例: data() { return { poll…