当前位置:首页 > VUE

vue实现筛选

2026-02-10 09:41:22VUE

Vue 实现筛选功能

筛选功能通常涉及数据列表的动态过滤,可以通过计算属性、方法或第三方库实现。以下是几种常见实现方式:

基于计算属性的筛选

利用计算属性对数组进行过滤,响应式更新筛选结果:

<template>
  <input v-model="searchText" placeholder="输入筛选条件">
  <ul>
    <li v-for="item in filteredItems" :key="item.id">{{ item.name }}</li>
  </ul>
</template>

<script>
export default {
  data() {
    return {
      items: [
        { id: 1, name: 'Apple' },
        { id: 2, name: 'Banana' }
      ],
      searchText: ''
    }
  },
  computed: {
    filteredItems() {
      return this.items.filter(item => 
        item.name.toLowerCase().includes(this.searchText.toLowerCase())
      )
    }
  }
}
</script>

使用自定义筛选方法

当筛选逻辑较复杂时,可通过方法处理:

methods: {
  filterItems() {
    return this.items.filter(item => {
      return (
        item.name.match(this.searchText) ||
        item.price < this.maxPrice
      )
    })
  }
}

结合 Vuex 的状态管理

在大型项目中,可通过 Vuex 集中管理筛选状态:

// store.js
state: {
  products: [],
  filters: {
    category: '',
    priceRange: [0, 100]
  }
},
getters: {
  filteredProducts: (state) => {
    return state.products.filter(product => {
      return (
        product.category === state.filters.category &&
        product.price >= state.filters.priceRange[0] &&
        product.price <= state.filters.priceRange[1]
      )
    })
  }
}

第三方库增强筛选

使用 lodash 等工具库实现高级筛选:

import _ from 'lodash'

computed: {
  filteredItems() {
    return _.filter(this.items, {
      active: true,
      category: this.selectedCategory
    })
  }
}

多条件筛选实现

通过对象存储多个筛选条件:

data() {
  return {
    filters: {
      name: '',
      category: '',
      minPrice: 0
    }
  }
},
computed: {
  filteredItems() {
    return this.items.filter(item => {
      return (
        item.name.includes(this.filters.name) &&
        item.category === this.filters.category &&
        item.price >= this.filters.minPrice
      )
    })
  }
}

性能优化建议

对于大数据量的筛选:

vue实现筛选

  • 使用防抖处理输入事件
  • 考虑分页或虚拟滚动
  • 对静态数据预先建立索引
import { debounce } from 'lodash'

methods: {
  handleSearch: debounce(function() {
    this.filteredItems = this.doFilter()
  }, 300)
}

以上方法可根据具体需求组合使用,Vue 的响应式系统会自动处理依赖更新。

标签: vue
分享给朋友:

相关文章

vue组件的实现

vue组件的实现

Vue 组件的实现方式 Vue 组件可以通过多种方式实现,以下是常见的几种方法: 单文件组件 (SFC) 使用 .vue 文件,包含模板、脚本和样式三部分: <template>…

vue实现钟表

vue实现钟表

使用 Vue 实现动态钟表 以下是一个基于 Vue 3 的动态钟表实现方案,包含时分秒指针和数字时间显示。 模板部分 <template> <div class="clock-…

vue 实现豆瓣

vue 实现豆瓣

以下是基于 Vue 实现豆瓣电影类功能的实现方案,涵盖核心模块和技术要点: 数据获取与 API 调用 使用豆瓣开放 API(需注意调用频率限制)或第三方代理接口 推荐 axios 进行异步请求,配合…

vue实现公告

vue实现公告

Vue 实现公告功能的方法 公告功能通常需要实现滚动展示、自动切换或固定显示的效果。以下是几种常见的实现方式: 使用 marquee 标签实现滚动公告 <template> &l…

vue实现单据

vue实现单据

Vue 实现单据功能的方法 使用 Vue 实现单据功能通常涉及表单设计、数据绑定、验证和提交等环节。以下是具体实现方案: 表单设计与数据绑定 使用 Vue 的 v-model 指令实现表单数据的双向…

vue实现视频

vue实现视频

Vue 实现视频播放的方法 在 Vue 项目中实现视频播放可以通过多种方式完成,以下是几种常见的方法: 使用 HTML5 的 <video> 标签 在 Vue 组件中直接使用 HTML…