当前位置:首页 > VUE

vue实现子表格

2026-01-14 04:20:45VUE

实现子表格的基本思路

在Vue中实现子表格通常需要结合组件化思想和动态渲染技术。常见的场景是在主表格的行内嵌套子表格,展开主表行时显示对应的子表数据。

使用el-table实现子表格(Element UI)

安装Element UI后,可以通过el-tableexpand特性实现子表格:

<template>
  <el-table :data="tableData" style="width: 100%">
    <el-table-column type="expand">
      <template #default="props">
        <el-table :data="props.row.children" border>
          <el-table-column prop="date" label="子表日期"></el-table-column>
          <el-table-column prop="name" label="子表姓名"></el-table-column>
        </el-table>
      </template>
    </el-table-column>
    <el-table-column prop="date" label="主表日期"></el-table-column>
    <el-table-column prop="name" label="主表姓名"></el-table-column>
  </el-table>
</template>

<script>
export default {
  data() {
    return {
      tableData: [{
        date: '2023-01-01',
        name: '主表行1',
        children: [{
          date: '2023-01-01',
          name: '子表行1'
        }]
      }]
    }
  }
}
</script>

使用v-for实现自定义子表格

对于非Element UI项目,可以通过v-for嵌套实现:

<template>
  <table>
    <tr v-for="(item, index) in tableData" :key="index">
      <td>{{ item.name }}</td>
      <td>
        <button @click="toggleExpand(index)">展开</button>
      </td>
      <td colspan="2" v-if="expandedRows.includes(index)">
        <table>
          <tr v-for="(child, childIndex) in item.children" :key="childIndex">
            <td>{{ child.name }}</td>
            <td>{{ child.value }}</td>
          </tr>
        </table>
      </td>
    </tr>
  </table>
</template>

<script>
export default {
  data() {
    return {
      tableData: [/* 数据 */],
      expandedRows: []
    }
  },
  methods: {
    toggleExpand(index) {
      const i = this.expandedRows.indexOf(index)
      i === -1 
        ? this.expandedRows.push(index)
        : this.expandedRows.splice(i, 1)
    }
  }
}
</script>

使用第三方组件库

一些专门的表格组件库提供更完善的子表格功能:

  1. VxeTable:通过expand-config配置

    <vxe-table
    :data="tableData"
    :expand-config="{trigger: 'cell'}">
    <vxe-column type="expand" width="60">
     <template #content="{ row }">
       <vxe-table :data="row.children"></vxe-table>
     </template>
    </vxe-column>
    </vxe-table>
  2. AG Grid:通过master/detail特性实现

性能优化建议

大数据量情况下需注意:

  • 使用虚拟滚动技术
  • 延迟加载子表数据
  • 添加加载状态指示器
  • 考虑分页加载子表数据

动态加载子表数据

点击展开时异步加载数据:

methods: {
  async loadChildren(row) {
    if (!row.children) {
      const res = await api.getChildren(row.id)
      this.$set(row, 'children', res.data)
    }
  }
}

以上方法可根据具体项目需求选择或组合使用,Element UI方案适合快速开发,自定义方案灵活性更高,专业表格组件则提供最完善的功能。

vue实现子表格

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

相关文章

vue实现sql操作

vue实现sql操作

在Vue中实现SQL操作通常需要结合后端服务或本地数据库技术,因为前端JavaScript无法直接连接SQL数据库。以下是几种常见的实现方式: 通过API与后端交互 Vue前端通过HTTP请求(如…

vue怎么实现选中删除

vue怎么实现选中删除

实现选中删除功能的方法 在Vue中实现选中删除功能通常涉及以下几个关键步骤: 数据绑定与选中状态管理 使用v-model或v-for指令绑定列表数据,结合复选框或单选按钮实现选中状态管理。例如:…

vue实现人脸识别比对

vue实现人脸识别比对

Vue 实现人脸识别比对的方法 使用现成的人脸识别 API 通过调用第三方人脸识别 API(如 Face++、百度 AI、腾讯云等)实现比对功能。注册开发者账号获取 API Key 和 Secret,…

vue实现文字播放栏

vue实现文字播放栏

Vue 实现文字播放栏(跑马灯效果) 方法一:使用 CSS 动画 + Vue 数据绑定 通过 CSS 的 @keyframes 实现动画效果,结合 Vue 的动态数据绑定控制内容。 <tem…

vue中如何实现循环

vue中如何实现循环

在 Vue 中实现循环 Vue 提供了 v-for 指令用于实现循环渲染列表数据。v-for 可以遍历数组、对象或数字范围,生成动态的 DOM 元素。 遍历数组 使用 v-for 遍历数组时,语法…

vue无限菜单怎么实现

vue无限菜单怎么实现

实现 Vue 无限菜单的方法 递归组件实现嵌套菜单 使用 Vue 的递归组件特性可以轻松实现无限级嵌套菜单。通过组件调用自身的方式处理嵌套数据。 <template> <ul…