当前位置:首页 > 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
  }
}

在模板中添加深度判断

vue实现table嵌套table

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

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

相关文章

vue穿梭框组件实现

vue穿梭框组件实现

实现基础穿梭框组件 在Vue中实现穿梭框组件,可以使用<el-transfer>(Element UI)或手动实现。以下是手动实现的核心逻辑: <template> &l…

vue实现过滤

vue实现过滤

Vue实现过滤的方法 在Vue中实现数据过滤可以通过多种方式完成,以下是几种常见的方法: 使用计算属性过滤 计算属性是Vue中处理数据过滤的理想选择,它们基于响应式依赖进行缓存,只有在相关依赖发生改…

vue SSG实现

vue SSG实现

Vue SSG 实现方法 Vue 的静态站点生成(SSG)可以通过多种工具和框架实现,以下是几种常见的方法: 使用 VuePress VuePress 是一个基于 Vue 的静态站点生成器,适合文档…

vue实现导出

vue实现导出

Vue 实现导出功能的方法 在 Vue 项目中实现导出功能通常涉及将数据导出为 Excel、CSV 或其他格式。以下是几种常见的实现方式: 使用 xlsx 库导出 Excel 安装 xlsx 库:…

vue实现曲线

vue实现曲线

Vue 实现曲线的方法 在 Vue 中实现曲线可以通过多种方式,包括使用 SVG、Canvas 或第三方库如 D3.js、ECharts 等。以下是几种常见的方法: 使用 SVG 绘制曲线 SVG…

vue实现开关

vue实现开关

Vue 实现开关组件的方法 使用原生HTML和Vue数据绑定 通过v-model绑定复选框的checked状态,结合CSS样式实现开关效果: <template> <label…