当前位置:首页 > VUE

vue实现表格树

2026-01-16 03:42:16VUE

Vue 实现表格树的方法

使用递归组件实现树形表格

在 Vue 中可以通过递归组件实现树形表格结构。定义一个组件,该组件可以调用自身来渲染子节点。

vue实现表格树

<template>
  <table>
    <thead>
      <tr>
        <th>名称</th>
        <th>值</th>
      </tr>
    </thead>
    <tbody>
      <tree-node v-for="node in treeData" :node="node" :key="node.id"></tree-node>
    </tbody>
  </table>
</template>

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

export default {
  components: { TreeNode },
  props: {
    treeData: Array
  }
}
</script>

TreeNode 递归组件

<template>
  <tr>
    <td>{{ node.name }}</td>
    <td>{{ node.value }}</td>
  </tr>
  <template v-if="node.children && node.children.length">
    <tr v-for="child in node.children" :key="child.id">
      <td style="padding-left: 20px">├─ {{ child.name }}</td>
      <td>{{ child.value }}</td>
    </tr>
  </template>
</template>

<script>
export default {
  name: 'TreeNode',
  props: {
    node: Object
  }
}
</script>

使用第三方库

对于更复杂的需求,可以考虑使用专门的表格树组件库:

vue实现表格树

  • vue-table-with-tree-grid:专为 Vue 设计的树形表格组件
  • element-uiel-table 配合 tree-props 属性
<el-table
  :data="treeData"
  row-key="id"
  border
  :tree-props="{children: 'children', hasChildren: 'hasChildren'}">
  <el-table-column prop="name" label="名称" width="180"></el-table-column>
  <el-table-column prop="value" label="值"></el-table-column>
</el-table>

动态加载子节点

对于大数据量的树形表格,可以实现动态加载子节点:

methods: {
  load(tree, treeNode, resolve) {
    setTimeout(() => {
      resolve([
        { id: 31, name: '子节点1', value: '值1' },
        { id: 32, name: '子节点2', value: '值2' }
      ])
    }, 1000)
  }
}

样式优化

为树形表格添加缩进和连接线样式:

.tree-table tr td:first-child {
  position: relative;
  padding-left: 20px;
}

.tree-table tr td:first-child:before {
  content: "";
  position: absolute;
  left: 10px;
  top: 50%;
  border-left: 1px solid #ccc;
  height: 100%;
  transform: translateY(-50%);
}

.tree-table tr:last-child td:first-child:before {
  height: 50%;
}

这些方法可以根据实际需求选择使用,简单树形结构可以使用递归组件,复杂场景建议使用成熟的UI库组件。

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

相关文章

vue实现弹窗

vue实现弹窗

Vue 实现弹窗的常见方法 使用组件化方式封装弹窗 创建一个独立的弹窗组件(如 Modal.vue),通过 v-if 或 v-show 控制显示隐藏: <template> <…

vue实现图集

vue实现图集

Vue 实现图集的方法 在 Vue 中实现图集功能可以通过多种方式完成,以下是一些常见的方法和实现步骤。 使用第三方库(如 vue-image-lightbox) 安装 vue-image-ligh…

vue实现标签

vue实现标签

Vue 实现标签的方法 在 Vue 中实现标签功能可以通过多种方式完成,以下是几种常见的方法: 使用动态组件 动态组件可以根据不同的条件渲染不同的标签内容。通过 :is 属性动态绑定组件名,实现标签…

vue实现录音

vue实现录音

Vue 实现录音功能 在 Vue 中实现录音功能可以通过浏览器提供的 MediaRecorder API 完成。以下是具体实现方法: 引入依赖 确保项目支持现代浏览器 API,无需额外安装库。若需兼…

vue源码实现

vue源码实现

Vue 源码实现解析 Vue.js 的核心实现可以分为响应式系统、虚拟 DOM、模板编译、组件化等几个关键部分。以下是对这些核心机制的详细解析。 响应式系统 Vue 的响应式系统基于 Object.…

vue 实现文字滚动

vue 实现文字滚动

Vue 实现文字滚动效果 使用CSS动画实现 通过CSS的@keyframes和transform属性实现文字滚动效果: <template> <div class="scro…