当前位置:首页 > 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组件结构 新建一个WeiboPost.vue组件,包含文本框、图片上传和发布按钮: <template> <div class="we…

vue实现store

vue实现store

Vue 实现 Store 在 Vue 中,可以通过 Vuex 或 Pinia 实现全局状态管理(Store)。以下是两种主流方案的实现方法。 使用 Vuex 实现 Store Vuex 是 Vue…

vue实现轮询

vue实现轮询

实现轮询的基本方法 在Vue中实现轮询可以通过setInterval或setTimeout配合递归调用完成。轮询通常用于定期向服务器请求数据更新。 使用setInterval的简单示例: data…

vue 实现递归

vue 实现递归

Vue 实现递归组件的方法 在 Vue 中实现递归组件通常用于处理树形结构数据,例如菜单、评论列表或文件目录。以下是实现递归组件的关键步骤: 定义递归组件 递归组件需要设置 name 属性,以便在模…

vue实现全屏

vue实现全屏

Vue 实现全屏功能的方法 在 Vue 中实现全屏功能可以通过浏览器提供的 Fullscreen API 来实现。以下是几种常见的实现方式: 使用原生 Fullscreen API 通过调用 doc…

vue实现切换

vue实现切换

Vue 实现切换功能的方法 在 Vue 中实现切换功能可以通过多种方式实现,以下是一些常见的方法: 使用 v-if 和 v-else 指令 通过条件渲染实现切换功能,适用于简单的显示/隐藏场景。…