当前位置:首页 > VUE

vue实现多级表格

2026-02-17 19:41:55VUE

实现多级表格的基本思路

在Vue中实现多级表格通常需要递归组件或动态渲染嵌套数据结构。核心是通过嵌套的<table><div>模拟表格结构,结合组件的递归调用或v-for动态渲染子级数据。

使用递归组件实现

定义一个递归组件,通过props接收层级数据,组件内部判断是否有子级数据并递归调用自身:

<template>
  <table>
    <thead>
      <tr>
        <th v-for="col in columns" :key="col.key">{{ col.title }}</th>
      </tr>
    </thead>
    <tbody>
      <tree-table-row 
        v-for="item in data" 
        :key="item.id" 
        :item="item" 
        :columns="columns"
      />
    </tbody>
  </table>
</template>

<script>
export default {
  name: 'TreeTable',
  props: ['data', 'columns'],
  components: {
    TreeTableRow: {
      name: 'TreeTableRow',
      props: ['item', 'columns'],
      template: `
        <template>
          <tr>
            <td v-for="col in columns" :key="col.key">{{ item[col.key] }}</td>
          </tr>
          <tr v-if="item.children && item.children.length">
            <td :colspan="columns.length">
              <tree-table-row 
                v-for="child in item.children" 
                :key="child.id" 
                :item="child" 
                :columns="columns"
              />
            </td>
          </tr>
        </template>
      `
    }
  }
}
</script>

使用第三方库

若需复杂功能(如展开折叠、拖拽排序),推荐使用现成库:

  • VxeTable:支持树形表格、虚拟滚动等高级功能。
  • Element UIel-table结合row-keytree-props实现树形表格。

安装VxeTable示例:

npm install xe-utils vxe-table

使用示例:

<template>
  <vxe-table
    :data="tableData"
    :tree-config="{ children: 'children' }"
  >
    <vxe-column field="name" title="Name" tree-node></vxe-column>
    <vxe-column field="size" title="Size"></vxe-column>
  </vxe-table>
</template>

<script>
import { VxeTable, VxeColumn } from 'vxe-table'
export default {
  components: { VxeTable, VxeColumn },
  data() {
    return {
      tableData: [
        { id: 1, name: 'Folder A', children: [
          { id: 2, name: 'File A1', size: '1MB' }
        ]}
      ]
    }
  }
}
</script>

动态加载子节点

对于大数据量,可通过懒加载优化性能。监听展开事件动态加载数据:

methods: {
  loadChildren({ row }) {
    return axios.get(`/api/children?id=${row.id}`).then(res => {
      row.children = res.data
    })
  }
}

在VxeTable中配置:

<vxe-table
  :tree-config="{ lazy: true, loadMethod: loadChildren }"
></vxe-table>

样式优化技巧

  • 使用CSS控制缩进体现层级:
    .tree-node--level-2 { padding-left: 20px; }
    .tree-node--level-3 { padding-left: 40px; }
  • 通过插槽自定义展开图标:
    <vxe-column field="name" title="Name">
      <template #default="{ row }">
        <span class="tree-expand" @click="toggleExpand(row)">
          <i v-if="row.children" :class="row.expanded ? 'icon-collapse' : 'icon-expand'"></i>
          {{ row.name }}
        </span>
      </template>
    </vxe-column>

vue实现多级表格

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

相关文章

vue实现模块

vue实现模块

Vue 实现模块化的方法 Vue 支持多种模块化开发方式,可以根据项目需求选择适合的方案。 使用单文件组件(SFC) 单文件组件是 Vue 最常用的模块化方式,将模板、脚本和样式封装在一个 .vue…

vue实现flbook

vue实现flbook

Vue 实现类似 Flbook 的翻页效果 要实现类似 Flbook 的翻页效果,可以使用 Vue 结合 CSS 动画和 JavaScript 事件处理。以下是实现方法: 安装依赖 需要安装 vue…

vue实现dag

vue实现dag

Vue实现DAG(有向无环图) 在Vue中实现DAG(Directed Acyclic Graph,有向无环图)通常涉及数据结构的建模、可视化渲染以及交互逻辑处理。以下是关键实现步骤和示例代码: 数…

vue实现选人

vue实现选人

实现选人功能的基本思路 在Vue中实现选人功能通常涉及以下核心环节:数据绑定、用户交互处理、状态管理以及界面渲染。以下是具体实现方法: 数据准备与组件结构 创建包含人员信息的数组,通常从API获取…

vue实现CRUD

vue实现CRUD

Vue 实现 CRUD 操作 Vue 提供了响应式数据绑定和组件化开发能力,结合后端 API 可以轻松实现 CRUD(增删改查)功能。以下是基于 Vue 3 和 Axios 的完整实现方案。 安装依…

vue实现listview

vue实现listview

Vue 实现 ListView 的方法 基础列表渲染 使用 v-for 指令可以轻松实现基础列表渲染。在 Vue 中,v-for 用于遍历数组或对象,生成动态列表。 <template>…