当前位置:首页 > VUE

vue实现表格筛选

2026-03-29 10:59:44VUE

实现表格筛选的基本思路

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

数据准备与表格渲染

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

<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)
      )
    )
  }
}

多条件筛选实现

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

<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>

性能优化建议

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

vue实现表格筛选

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

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

相关文章

vue 实现pc

vue 实现pc

Vue 实现 PC 端应用的核心要点 Vue.js 是一个渐进式框架,适合构建 PC 端单页应用(SPA)或复杂的前端界面。以下是实现 PC 端应用的关键方法和注意事项: 项目初始化与工程化配置 使…

vue 实现blog

vue 实现blog

Vue 实现博客的基本步骤 使用 Vue 实现博客可以分为前端和后端两部分,前端使用 Vue.js 框架,后端可以选择 Node.js、Python 或其他服务端语言。以下是一个基于 Vue 的博客实…

vue tab实现

vue tab实现

Vue Tab 实现方法 使用动态组件实现 Tab 在 Vue 中可以通过动态组件 <component :is="currentTab"> 结合 v-for 和 v-bind 实现 Ta…

vue实现机制

vue实现机制

Vue 实现机制的核心原理 Vue.js 的核心实现机制主要基于响应式系统、虚拟 DOM 和组件化设计。以下是关键实现细节: 响应式系统 Vue 通过 Object.defineProperty(V…

vue实现数组

vue实现数组

Vue 实现数组操作的方法 在 Vue 中,数组的操作需要特别注意响应式的问题。Vue 提供了一些方法来确保数组的变动能够触发视图更新。 响应式数组方法 Vue 对以下数组方法进行了封装,确保它们能…

vue单选实现

vue单选实现

Vue 单选实现 在 Vue 中实现单选功能可以通过多种方式完成,以下是几种常见的方法: 使用 v-model 绑定单选按钮 通过 v-model 绑定一个变量,可以实现单选效果。当用户选择不同的选…