当前位置:首页 > VUE

vue实现表格筛选

2026-03-29 10:59:44VUE

实现表格筛选的基本思路

在Vue中实现表格筛选通常涉及以下几个核心步骤:数据绑定、筛选逻辑处理、动态渲染。以下是具体实现方法:

数据准备与表格渲染

定义表格数据和表头结构,使用v-for循环渲染表格内容:

vue实现表格筛选

<template>
  <div>
    <input v-model="searchText" placeholder="输入筛选条件"/>
    <table>
      <thead>
        <tr>
          <th v-for="col in columns" :key="col.key">{{ col.title }}</th>
        </tr>
      </thead>
      <tbody>
        <tr v-for="item in filteredData" :key="item.id">
          <td v-for="col in columns" :key="col.key">{{ item[col.key] }}</td>
        </tr>
      </tbody>
    </table>
  </div>
</template>

<script>
export default {
  data() {
    return {
      searchText: '',
      columns: [
        { key: 'name', title: '姓名' },
        { key: 'age', title: '年龄' },
        { key: 'address', title: '地址' }
      ],
      tableData: [
        { id: 1, name: '张三', age: 25, address: '北京' },
        { id: 2, name: '李四', age: 30, address: '上海' }
      ]
    }
  }
}
</script>

计算属性实现筛选逻辑

通过计算属性动态返回筛选后的数据:

computed: {
  filteredData() {
    const search = this.searchText.toLowerCase()
    return this.tableData.filter(item => 
      Object.values(item).some(
        val => String(val).toLowerCase().includes(search)
      )
    )
  }
}

多条件筛选实现

对于多字段独立筛选的情况,可以扩展为多个输入框:

vue实现表格筛选

<input v-model="filters.name" placeholder="姓名筛选"/>
<input v-model="filters.age" placeholder="年龄筛选"/>
data() {
  return {
    filters: {
      name: '',
      age: ''
    }
  }
},
computed: {
  filteredData() {
    return this.tableData.filter(item => {
      return (
        (!this.filters.name || item.name.includes(this.filters.name)) &&
        (!this.filters.age || item.age == this.filters.age)
      )
    })
  }
}

使用第三方组件库

对于复杂需求,可以使用现成的表格组件库如Element UI或Ant Design Vue:

<template>
  <el-table :data="filteredData">
    <el-table-column prop="name" label="姓名"></el-table-column>
    <el-table-column prop="age" label="年龄"></el-table-column>
    <el-table-column prop="address" label="地址"></el-table-column>
  </el-table>
</template>

性能优化建议

对于大数据量的表格,建议:

  • 添加防抖处理输入变化
  • 实现分页加载
  • 考虑虚拟滚动技术
  • 对不可见数据进行懒加载
methods: {
  debounceFilter: _.debounce(function() {
    this.filterData()
  }, 300)
}

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

相关文章

vue实现剪辑

vue实现剪辑

Vue 实现视频剪辑功能 在Vue中实现视频剪辑功能通常需要结合HTML5的<video>元素和第三方库(如FFmpeg.js或Video.js)。以下是几种常见的实现方法: 使用FFm…

vue diff实现

vue diff实现

Vue Diff 算法实现原理 Vue 的虚拟 DOM Diff 算法(即 patch 过程)是其高效渲染的核心,主要通过对比新旧虚拟节点的差异,最小化 DOM 操作。以下是关键实现要点: 同层级比…

vue实现tip

vue实现tip

Vue实现Tooltip的方法 使用Vue实现Tooltip可以通过多种方式完成,以下是几种常见的方法: 使用原生HTML的title属性 在Vue模板中直接使用HTML的title属性是最简单的实…

vue实现加载

vue实现加载

Vue 实现加载功能的方法 使用 v-if 或 v-show 控制加载状态 通过数据绑定控制加载动画的显示与隐藏。v-if 会完全移除 DOM 元素,v-show 只是切换 display 属性。…

vue实现回复

vue实现回复

Vue 实现回复功能 在 Vue 中实现回复功能通常涉及前端表单交互、数据绑定和后端通信。以下是实现回复功能的详细步骤: 数据绑定与表单设计 使用 Vue 的 v-model 绑定回复框的输入内容,…

vue实现滑动条

vue实现滑动条

Vue 实现滑动条 在 Vue 中实现滑动条可以通过原生 HTML 的 <input type="range"> 或自定义组件实现。以下是两种常见方法: 使用原生 HTML 滑动条 通过…