当前位置:首页 > VUE

vue实现子表格

2026-02-10 21:04:30VUE

Vue 实现子表格的方法

在 Vue 中实现子表格(嵌套表格)可以通过多种方式完成,以下是几种常见的方法:

使用组件递归

通过递归组件实现子表格,适用于多层嵌套数据。定义一个表格组件,内部调用自身实现子表格的渲染。

vue实现子表格

<template>
  <table>
    <tr v-for="(item, index) in data" :key="index">
      <td>{{ item.name }}</td>
      <td>
        <nested-table v-if="item.children" :data="item.children" />
      </td>
    </tr>
  </table>
</template>

<script>
export default {
  name: 'NestedTable',
  props: {
    data: Array
  }
}
</script>

使用 v-for 嵌套

适用于固定层级的子表格,通过多层 v-for 循环渲染数据。

vue实现子表格

<template>
  <table>
    <tr v-for="(parent, i) in data" :key="i">
      <td>{{ parent.name }}</td>
      <td>
        <table>
          <tr v-for="(child, j) in parent.children" :key="j">
            <td>{{ child.name }}</td>
          </tr>
        </table>
      </td>
    </tr>
  </table>
</template>

使用第三方库

借助如 element-uiant-design-vue 等 UI 库的表格组件,它们通常内置了展开子表格的功能。

<template>
  <el-table :data="data">
    <el-table-column prop="name" label="Name"></el-table-column>
    <el-table-column label="Children">
      <template #default="{ row }">
        <el-table :data="row.children" v-if="row.children">
          <el-table-column prop="name" label="Child Name"></el-table-column>
        </el-table>
      </template>
    </el-table-column>
  </el-table>
</template>

动态加载子表格

通过点击事件动态加载子表格数据,适合数据量较大的场景。

<template>
  <table>
    <tr v-for="(item, index) in data" :key="index">
      <td>{{ item.name }}</td>
      <td>
        <button @click="loadChildren(item)">Show Children</button>
        <table v-if="item.showChildren">
          <tr v-for="(child, i) in item.children" :key="i">
            <td>{{ child.name }}</td>
          </tr>
        </table>
      </td>
    </tr>
  </table>
</template>

<script>
export default {
  data() {
    return {
      data: [
        { name: 'Parent 1', children: [], showChildren: false },
        { name: 'Parent 2', children: [], showChildren: false }
      ]
    }
  },
  methods: {
    loadChildren(item) {
      item.showChildren = !item.showChildren
      if (item.children.length === 0) {
        // 模拟异步加载子数据
        setTimeout(() => {
          item.children = [{ name: 'Child 1' }, { name: 'Child 2' }]
        }, 500)
      }
    }
  }
}
</script>

注意事项

  • 数据层级不宜过深,否则可能导致性能问题。
  • 递归组件需设置终止条件,避免无限循环。
  • 动态加载子表格时注意异步数据的处理。

以上方法可根据实际需求选择或组合使用。

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

相关文章

vue实现摘要

vue实现摘要

Vue 实现摘要的方法 在 Vue 中实现文本摘要功能通常涉及截取文本的前部分内容并添加省略号。可以通过计算属性、过滤器或自定义指令来实现。 计算属性实现 在 Vue 组件中定义一个计算属性,用于截…

vue实现granfana

vue实现granfana

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

vue实现input

vue实现input

Vue 实现 Input 输入框的方法 基本双向绑定 使用 v-model 指令实现双向数据绑定,适用于大多数表单场景: <template> <input v-model=…

vue 组件实现

vue 组件实现

Vue 组件实现方法 单文件组件 (SFC) 使用 .vue 文件格式,包含模板、脚本和样式三部分: <template> <div class="example">{{…

vue实现portal

vue实现portal

Vue 实现 Portal 功能 Portal 是一种将子节点渲染到父组件 DOM 层级之外的 DOM 节点的技术,常用于实现模态框、弹出层等需要脱离当前组件层级的场景。Vue 可以通过多种方式实现…

vue底层实现

vue底层实现

Vue.js 的底层实现原理 Vue.js 是一个渐进式 JavaScript 框架,其核心实现主要包括响应式系统、虚拟 DOM、模板编译和组件化机制。以下是其关键实现细节: 响应式系统 Vue 2…