当前位置:首页 > VUE

vue实现table嵌套table

2026-02-25 03:14:40VUE

Vue 实现 Table 嵌套 Table

在 Vue 中实现表格嵌套表格的功能,可以通过组件化和递归的方式实现。以下是具体实现方法:

模板结构

<template>
  <table>
    <thead>
      <tr>
        <th v-for="header in headers" :key="header">{{ header }}</th>
      </tr>
    </thead>
    <tbody>
      <tr v-for="(row, index) in data" :key="index">
        <td v-for="(value, key) in row" :key="key">
          <template v-if="Array.isArray(value)">
            <nested-table :data="value" :headers="nestedHeaders" />
          </template>
          <template v-else>
            {{ value }}
          </template>
        </td>
      </tr>
    </tbody>
  </table>
</template>

组件定义

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

使用示例

<template>
  <nested-table 
    :data="tableData" 
    :headers="['Name', 'Age', 'Orders']" 
  />
</template>

<script>
import NestedTable from './NestedTable.vue'

export default {
  components: {
    NestedTable
  },
  data() {
    return {
      tableData: [
        {
          name: 'John',
          age: 25,
          orders: [
            { id: 1, product: 'Laptop', price: 999 },
            { id: 2, product: 'Phone', price: 599 }
          ]
        },
        {
          name: 'Jane',
          age: 30,
          orders: [
            { id: 3, product: 'Tablet', price: 399 }
          ]
        }
      ]
    }
  }
}
</script>

样式处理

<style scoped>
table {
  border-collapse: collapse;
  width: 100%;
}
th, td {
  border: 1px solid #ddd;
  padding: 8px;
}
</style>

注意事项

  • 确保嵌套数据有明确的父子关系
  • 为每个表格设置不同的headers属性
  • 使用scoped样式避免样式冲突
  • 考虑添加展开/折叠功能提升用户体验
  • 对于大数据量建议使用虚拟滚动优化性能

扩展功能

可以通过添加props控制嵌套深度限制

props: {
  maxDepth: {
    type: Number,
    default: 3
  },
  currentDepth: {
    type: Number,
    default: 0
  }
}

在模板中添加深度判断

<template v-if="Array.isArray(value) && currentDepth < maxDepth">
  <nested-table 
    :data="value" 
    :headers="nestedHeaders"
    :current-depth="currentDepth + 1"
  />
</template>

vue实现table嵌套table

标签: 嵌套vue
分享给朋友:

相关文章

vue实现裁剪头像

vue实现裁剪头像

Vue 实现头像裁剪功能 实现头像裁剪功能通常需要结合第三方库如 cropperjs 或 vue-cropper。以下是两种常见实现方式: 使用 vue-cropper 库 安装依赖: np…

vue查看更多怎么实现

vue查看更多怎么实现

实现 Vue 的“查看更多”功能 数据截取与显示控制 通过 v-if 或 v-show 控制内容的显示与隐藏。初始状态下只显示部分内容,点击“查看更多”后展开完整内容。 <template&…

vue无限菜单怎么实现

vue无限菜单怎么实现

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

vue 路由 实现

vue 路由 实现

Vue 路由实现方法 Vue Router 是 Vue.js 的官方路由管理器,用于构建单页面应用(SPA)。以下是实现 Vue 路由的详细步骤: 安装 Vue Router 通过 npm 或 ya…

vue架构实现

vue架构实现

Vue 架构实现核心方案 Vue.js 的架构实现通常围绕模块化、组件化和状态管理展开。以下为常见实现方案: 基于单文件组件(SFC)的模块化 通过 .vue 文件组织模板、脚本和样式: <…

vue实现modal

vue实现modal

Vue 实现 Modal 弹窗组件 使用 Vue 实现 Modal 弹窗组件可以通过多种方式,包括原生 Vue 组件、第三方库或自定义指令。以下是几种常见方法: 原生 Vue 组件实现 创建一个基…