当前位置:首页 > VUE

vue实现子表格

2026-03-07 20:56:12VUE

实现子表格的基本思路

在Vue中实现子表格通常涉及嵌套数据结构与动态渲染。核心是通过递归组件或嵌套循环展示父子层级关系,结合展开/折叠交互控制子表格的显示状态。

使用递归组件实现嵌套表格

递归组件适合处理不确定层级的嵌套数据。父组件调用自身渲染子表格,直至数据遍历完毕。

vue实现子表格

<template>
  <table>
    <tr v-for="item in tableData" :key="item.id">
      <td>{{ item.name }}</td>
      <td>
        <button @click="toggleChildren(item)">展开</button>
      </td>
    </tr>
    <tr v-if="item.showChildren && item.children">
      <td colspan="2">
        <nested-table :table-data="item.children" />
      </td>
    </tr>
  </table>
</template>

<script>
export default {
  name: 'NestedTable',
  props: ['tableData'],
  methods: {
    toggleChildren(item) {
      item.showChildren = !item.showChildren
    }
  }
}
</script>

使用Element UI的Table组件实现

Element UI的el-table内置展开行功能,通过expand插槽实现子表格。

<template>
  <el-table :data="tableData">
    <el-table-column type="expand">
      <template #default="{ row }">
        <el-table :data="row.children" v-if="row.children">
          <!-- 子表格列定义 -->
        </el-table>
      </template>
    </el-table-column>
    <!-- 父表格列定义 -->
  </el-table>
</template>

动态加载子表格数据

对于大数据量场景,可采用懒加载方式。点击展开时异步获取子数据。

vue实现子表格

methods: {
  loadChildren(row, callback) {
    if (row.childrenLoaded) return
    api.getChildren(row.id).then(res => {
      row.children = res.data
      row.childrenLoaded = true
      callback()
    })
  }
}

样式与交互优化

通过CSS控制缩进视觉层级,添加过渡动画提升体验。

.sub-table {
  margin-left: 20px;
  transition: all 0.3s ease;
}

性能注意事项

对于深层嵌套数据,建议:

  • 设置max-depth限制递归深度
  • 使用虚拟滚动处理大量数据
  • 通过v-if而非v-show控制子表格渲染

以上方案可根据实际需求组合使用,Element UI方案适合快速开发,递归组件方案灵活性更高。

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

相关文章

vue公共列表的实现

vue公共列表的实现

实现 Vue 公共列表组件 公共列表组件通常用于展示重复结构的数据,例如商品列表、用户列表等。以下是一个典型的实现方式: 基础实现 创建可复用的列表组件 List.vue: <templat…

vue实现动态用户表格

vue实现动态用户表格

Vue 实现动态用户表格 数据准备与响应式绑定 在 Vue 中实现动态用户表格,需先定义响应式数据。通过 data 或 ref(Composition API)存储用户数据数组,确保数据变化能触发视图…

vue实现流程

vue实现流程

Vue 实现流程的基本步骤 安装 Vue.js 可以通过 CDN 引入或使用 npm/yarn 安装。 CDN 方式: <script src="https://cdn.jsdelivr.…

vue实现granfana

vue实现granfana

Vue 实现类似 Grafana 的仪表盘 要在 Vue 中实现类似 Grafana 的仪表盘功能,需要结合数据可视化库、状态管理和 UI 组件。以下是关键步骤和推荐工具: 数据可视化库 使用 E…

vue实现popup

vue实现popup

Vue 实现 Popup 弹窗 使用 Vue 原生组件 创建一个基本的 Vue 组件作为弹窗,通过 v-if 或 v-show 控制显示隐藏。 <template> <div&…

vue实现加减

vue实现加减

Vue 实现加减功能 在 Vue 中实现加减功能可以通过数据绑定和事件监听来完成。以下是一个简单的实现方法: 模板部分 <template> <div> <…