当前位置:首页 > VUE

vue实现表格筛选

2026-03-08 23:39:21VUE

Vue实现表格筛选的方法

使用计算属性实现筛选

在Vue中可以通过计算属性对表格数据进行筛选。计算属性会自动追踪依赖变化,当筛选条件或原始数据变化时自动更新结果。

<template>
  <div>
    <input v-model="searchQuery" placeholder="搜索...">
    <table>
      <tr v-for="item in filteredItems" :key="item.id">
        <td>{{ item.name }}</td>
        <td>{{ item.age }}</td>
      </tr>
    </table>
  </div>
</template>

<script>
export default {
  data() {
    return {
      searchQuery: '',
      items: [
        { id: 1, name: '张三', age: 25 },
        { id: 2, name: '李四', age: 30 }
      ]
    }
  },
  computed: {
    filteredItems() {
      return this.items.filter(item => 
        item.name.toLowerCase().includes(this.searchQuery.toLowerCase())
      )
    }
  }
}
</script>

使用第三方表格组件

对于复杂表格需求,可以使用Element UI、Ant Design Vue等UI库提供的表格组件,它们内置了筛选功能。

以Element UI为例:

<template>
  <el-table :data="tableData" style="width: 100%">
    <el-table-column prop="date" label="日期" width="180">
      <template #header>
        <el-input v-model="filters.date" size="mini" placeholder="筛选日期"/>
      </template>
    </el-table-column>
    <el-table-column prop="name" label="姓名" width="180">
      <template #header>
        <el-input v-model="filters.name" size="mini" placeholder="筛选姓名"/>
      </template>
    </el-table-column>
  </el-table>
</template>

<script>
export default {
  data() {
    return {
      tableData: [...],
      filters: {
        date: '',
        name: ''
      }
    }
  },
  computed: {
    filteredData() {
      return this.tableData.filter(item => 
        (!this.filters.date || item.date.includes(this.filters.date)) &&
        (!this.filters.name || item.name.includes(this.filters.name))
      )
    }
  }
}
</script>

多条件复杂筛选

对于需要多条件组合筛选的场景,可以构建更复杂的筛选逻辑:

computed: {
  filteredItems() {
    let result = this.items
    if (this.searchQuery) {
      result = result.filter(item => 
        item.name.toLowerCase().includes(this.searchQuery.toLowerCase()) ||
        item.description.toLowerCase().includes(this.searchQuery.toLowerCase())
      )
    }
    if (this.selectedCategory) {
      result = result.filter(item => item.category === this.selectedCategory)
    }
    if (this.priceRange) {
      result = result.filter(item => 
        item.price >= this.priceRange[0] && 
        item.price <= this.priceRange[1]
      )
    }
    return result
  }
}

服务端筛选

对于大数据量场景,建议将筛选逻辑放在服务端:

methods: {
  async fetchFilteredData() {
    const params = {
      search: this.searchQuery,
      category: this.selectedCategory,
      minPrice: this.minPrice,
      maxPrice: this.maxPrice
    }
    const { data } = await axios.get('/api/items', { params })
    this.items = data
  }
}

性能优化技巧

对于前端大数据量筛选,可以使用防抖技术减少频繁计算:

vue实现表格筛选

import { debounce } from 'lodash'

export default {
  data() {
    return {
      searchQuery: '',
      items: [...],
      debouncedFilter: null
    }
  },
  created() {
    this.debouncedFilter = debounce(this.applyFilter, 300)
  },
  methods: {
    applyFilter() {
      // 筛选逻辑
    }
  },
  watch: {
    searchQuery() {
      this.debouncedFilter()
    }
  }
}

标签: 表格vue
分享给朋友:

相关文章

vue怎么实现页面返回

vue怎么实现页面返回

Vue 实现页面返回的方法 在 Vue 中实现页面返回功能,可以通过以下几种方式完成,具体取决于项目使用的路由模式和技术栈。 使用 Vue Router 的编程式导航 通过 this.$router…

vue实现tablegrid

vue实现tablegrid

Vue 实现 TableGrid 的方法 使用 Element UI 的 Table 组件 Element UI 提供了强大的 Table 组件,可以快速实现表格布局。安装 Element UI 后,…

jq 实现 vue

jq 实现 vue

jq 实现 Vue 的核心功能 jq 是一个轻量级的 JavaScript 库,主要用于 DOM 操作和事件处理。虽然它不能完全替代 Vue,但可以通过一些技巧模拟 Vue 的核心功能,如数据绑定、事…

vue vnode实现

vue vnode实现

Vue VNode 实现原理 VNode(Virtual Node)是 Vue 的核心概念之一,用于描述真实 DOM 的轻量级虚拟表示。VNode 的实现涉及以下关键点: VNode 的基本结构 V…

vue实现布局

vue实现布局

Vue 实现布局方法 Vue 提供了多种方式实现页面布局,可以通过组件化、CSS 框架或自定义样式完成。以下是几种常见方法: 使用 CSS Flexbox 或 Grid 通过 Vue 单文件组件结合…

vue实现addclass

vue实现addclass

Vue 实现动态添加 class 的方法 在 Vue 中动态添加 class 可以通过多种方式实现,以下是常见的几种方法: 使用对象语法 通过绑定一个对象到 :class,可以动态切换 class…