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

vue实现单页面

Vue 实现单页面应用(SPA) Vue.js 是一个渐进式框架,非常适合构建单页面应用(SPA)。SPA 的核心特点是整个应用只有一个 HTML 页面,通过动态加载内容实现页面切换,无需重新加载整个…

vue实现放大效果

vue实现放大效果

使用 CSS transform 实现放大效果 在 Vue 中实现放大效果可以通过 CSS 的 transform: scale() 属性。这种方法简单高效,适合大多数交互场景。 定义一个 CSS…

vue实现打字机

vue实现打字机

Vue实现打字机效果 在Vue中实现打字机效果可以通过动态更新文本内容并添加延迟来实现。以下是几种常见的实现方法: 使用setInterval实现 <template> <d…

vue实现列表显示

vue实现列表显示

Vue 实现列表显示的方法 在 Vue 中实现列表显示通常使用 v-for 指令,结合数组或对象数据渲染动态列表。以下是几种常见的实现方式。 基本列表渲染 通过 v-for 指令遍历数组,动态生成列…

vue实现按钮组轮换

vue实现按钮组轮换

实现按钮组轮换的方法 在Vue中实现按钮组轮换效果可以通过动态绑定类和事件处理来完成。以下是一种常见的实现方式: 模板部分 <template> <div class="bu…

vue实现3d宇宙

vue实现3d宇宙

Vue实现3D宇宙效果 使用Three.js库 Three.js是一个强大的JavaScript 3D库,可以轻松集成到Vue项目中。安装Three.js依赖: npm install three…