当前位置:首页 > 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 的 data 中定义一个数组作…

vue实现条件判断

vue实现条件判断

Vue 条件判断实现方法 Vue 提供了多种方式实现条件判断,可以根据不同场景选择合适的方式。 v-if / v-else-if / v-else 这是 Vue 中最常用的条件渲染指令,根据表达式的…

vue实现tab换行

vue实现tab换行

Vue实现Tab切换的常见方法 使用Vue实现Tab切换功能可以通过多种方式完成,以下是几种常见的方法: 动态组件结合v-if或v-show 通过v-if或v-show控制不同Tab内容的显示…

vue单页面实现登录

vue单页面实现登录

实现登录功能的基本流程 在Vue单页面应用中实现登录功能,通常需要以下几个关键步骤: 创建登录表单组件 使用Vue的模板语法创建包含用户名和密码输入框的表单,并绑定数据到组件的data属性。 &l…

vue实现按钮组轮换

vue实现按钮组轮换

实现按钮组轮换的方法 在Vue中实现按钮组轮换效果可以通过动态绑定类和事件处理来完成。以下是一种常见的实现方式: 模板部分 <template> <div class="…

vue使用vr实现标注

vue使用vr实现标注

Vue 中使用 VR 实现标注的方法 在 Vue 项目中结合 VR 技术实现标注功能,可以通过 WebXR 和 Three.js 等库实现。以下为具体实现方法: 安装依赖 确保项目中已安装 Thre…