当前位置:首页 > VUE

vue实现表格筛选

2026-01-16 18:45:18VUE

实现表格筛选的基本思路

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

基础数据绑定与表格渲染

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

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

<script>
export default {
  data() {
    return {
      searchQuery: '',
      headers: [
        { key: 'name', label: '姓名' },
        { key: 'age', label: '年龄' },
        { key: 'department', label: '部门' }
      ],
      tableData: [
        { id: 1, name: '张三', age: 25, department: '技术部' },
        { id: 2, name: '李四', age: 30, department: '市场部' }
      ]
    };
  }
};
</script>

计算属性实现筛选逻辑

通过计算属性filteredData动态返回符合筛选条件的数据。此处以多字段模糊匹配为例:

vue实现表格筛选

computed: {
  filteredData() {
    const query = this.searchQuery.toLowerCase();
    if (!query) return this.tableData;

    return this.tableData.filter(item => {
      return Object.values(item).some(
        val => String(val).toLowerCase().includes(query)
      );
    });
  }
}

进阶筛选:分字段精确匹配

若需针对特定字段单独筛选,可扩展输入框和筛选逻辑:

<input v-model="filters.name" placeholder="姓名筛选" />
<input v-model="filters.department" placeholder="部门筛选" />
data() {
  return {
    filters: {
      name: '',
      department: ''
    }
  };
},
computed: {
  filteredData() {
    return this.tableData.filter(item => {
      const nameMatch = item.name.includes(this.filters.name);
      const deptMatch = item.department.includes(this.filters.department);
      return nameMatch && deptMatch;
    });
  }
}

性能优化:防抖处理

当数据量较大时,可为输入框添加防抖函数减少频繁计算:

vue实现表格筛选

methods: {
  debounce(fn, delay) {
    let timer;
    return function(...args) {
      clearTimeout(timer);
      timer = setTimeout(() => fn.apply(this, args), delay);
    };
  }
},
created() {
  this.debouncedFilter = this.debounce(this.updateFilter, 300);
}

使用第三方组件库

对于复杂场景,可借助现成组件库如Element UI的el-table

<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="department" label="部门">
    <template #header>
      <el-input v-model="filters.department" size="mini" />
    </template>
  </el-table-column>
</el-table>

服务端筛选实现

当数据量极大时,建议将筛选逻辑移至服务端:

methods: {
  async fetchData() {
    const res = await axios.get('/api/data', {
      params: { search: this.searchQuery }
    });
    this.tableData = res.data;
  }
},
watch: {
  searchQuery() {
    this.fetchData();
  }
}

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

相关文章

vue实现文档分享

vue实现文档分享

Vue 实现文档分享功能 文档分享功能通常涉及文件上传、存储、生成分享链接以及权限控制等模块。以下是基于 Vue 的实现方案: 文件上传组件 使用 element-ui 或 ant-design-v…

vue页面分离的实现

vue页面分离的实现

Vue页面分离的实现方法 将Vue页面分离为多个组件或模块,有助于提升代码可维护性和复用性。以下是几种常见的实现方式: 组件化拆分 通过将页面拆分为多个子组件,每个组件负责特定功能或UI部分。使用i…

vue实现表格多行修改

vue实现表格多行修改

实现多行编辑表格 在Vue中实现表格的多行编辑功能,可以通过以下方法完成。这里以Element UI的表格组件为例,但思路适用于其他UI库或原生实现。 数据准备 定义表格数据和编辑状态管理变量:…

vue调用接口实现退出

vue调用接口实现退出

实现Vue退出功能的步骤 在Vue中调用接口实现退出功能通常需要与后端API交互,以下是实现方法: 前端实现 创建退出方法,调用后端API接口: methods: { logout()…

vue实现视窗

vue实现视窗

Vue 实现视窗功能 在 Vue 中实现视窗功能通常涉及监听浏览器窗口大小变化、响应式布局或创建自定义弹窗组件。以下是几种常见实现方式: 监听浏览器窗口大小变化 使用 Vue 的 mounted…

vue   实现单选

vue 实现单选

Vue 实现单选功能 在 Vue 中实现单选功能可以通过多种方式,以下是几种常见的方法: 使用原生 <input type="radio"> 绑定 v-model 通过 v-model…