当前位置:首页 > 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特性实现

性能优化建议

大数据量情况下需注意:

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

动态加载子表数据

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

vue实现子表格

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

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

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

相关文章

vue slot实现

vue slot实现

vue slot 的实现方法 在 Vue 中,slot 是一种内容分发机制,允许父组件向子组件传递模板内容。以下是几种常见的 slot 实现方式: 默认 slot 默认 slot 是最基础的 slo…

vue实现rtc

vue实现rtc

Vue 实现 RTC 的步骤 安装依赖 在 Vue 项目中安装 WebRTC 相关依赖,如 simple-peer 或 peerjs,用于简化 WebRTC 的实现。 运行以下命令安装 simple-…

vue实现oauth

vue实现oauth

Vue 实现 OAuth 的步骤 安装必要的依赖 确保项目中安装了 axios 和 vue-router。OAuth 通常需要发送 HTTP 请求和处理路由跳转。 npm install axios…

vue实现RTMP

vue实现RTMP

Vue 中实现 RTMP 流播放 RTMP(Real-Time Messaging Protocol)是一种用于实时音视频流传输的协议。在 Vue 中实现 RTMP 播放通常需要借助第三方库或播放器。…

vue实现编辑

vue实现编辑

Vue 实现编辑功能 在 Vue 中实现编辑功能通常涉及表单绑定、状态管理和事件处理。以下是一个常见的实现方法: 双向数据绑定 使用 v-model 指令实现表单元素与数据的双向绑定: <i…

vue动画实现

vue动画实现

Vue动画实现方法 Vue提供了多种方式实现动画效果,主要通过内置组件和第三方库完成。 使用<transition>组件 Vue内置的<transition>组件可以为元素添…