当前位置:首页 > VUE

vue实现树形表格数据

2026-02-24 03:58:14VUE

vue实现树形表格数据

在Vue中实现树形表格数据通常需要结合递归组件或第三方库。以下是几种常见方法:

使用递归组件

递归组件是Vue中处理树形结构的核心方法。创建一个可自调用的组件来渲染嵌套数据。

<template>
  <table>
    <tbody>
      <tree-row v-for="(item, index) in treeData" :key="index" :item="item" />
    </tbody>
  </table>
</template>

<script>
export default {
  components: {
    TreeRow: {
      template: `
        <tr>
          <td>{{ item.name }}</td>
          <td v-if="item.children">
            <table>
              <tbody>
                <tree-row v-for="(child, i) in item.children" :key="i" :item="child" />
              </tbody>
            </table>
          </td>
        </tr>
      `,
      props: ['item']
    }
  },
  data() {
    return {
      treeData: [
        {
          name: 'Parent',
          children: [
            { name: 'Child 1' },
            { name: 'Child 2' }
          ]
        }
      ]
    }
  }
}
</script>

使用element-ui的el-table

element-ui提供了内置的树形表格支持,通过设置row-keytree-props属性即可实现。

<template>
  <el-table
    :data="tableData"
    row-key="id"
    :tree-props="{children: 'children', hasChildren: 'hasChildren'}">
    <el-table-column prop="name" label="名称"></el-table-column>
    <el-table-column prop="value" label="值"></el-table-column>
  </el-table>
</template>

<script>
export default {
  data() {
    return {
      tableData: [{
        id: 1,
        name: '一级',
        children: [{
          id: 2,
          name: '二级',
          value: 'value'
        }]
      }]
    }
  }
}
</script>

使用vue-table-with-tree-grid插件

专门为Vue设计的树形表格插件,提供开箱即用的功能。

import Vue from 'vue'
import TreeTable from 'vue-table-with-tree-grid'

Vue.use(TreeTable)
<template>
  <tree-table
    :data="treeData"
    :columns="columns"
    expand-key="name">
  </tree-table>
</template>

<script>
export default {
  data() {
    return {
      columns: [
        { label: '名称', prop: 'name' },
        { label: '值', prop: 'value' }
      ],
      treeData: [
        {
          name: 'Parent',
          value: '',
          children: [
            { name: 'Child', value: '123' }
          ]
        }
      ]
    }
  }
}
</script>

自定义展开/折叠功能

对于更复杂的需求,可以手动实现展开/折叠逻辑。

<template>
  <table>
    <tbody>
      <tr v-for="item in flattenedData" :key="item.id">
        <td @click="toggleExpand(item)">
          {{ '→'.repeat(item.level) }} {{ item.name }}
        </td>
        <td>{{ item.value }}</td>
      </tr>
    </tbody>
  </table>
</template>

<script>
export default {
  data() {
    return {
      treeData: [
        {
          id: 1,
          name: 'Parent',
          children: [
            { id: 2, name: 'Child', value: 'test' }
          ]
        }
      ],
      expandedIds: [1]
    }
  },
  computed: {
    flattenedData() {
      const flatten = (nodes, level = 0) => {
        return nodes.reduce((acc, node) => {
          acc.push({ ...node, level, isExpanded: this.expandedIds.includes(node.id) })
          if (node.children && this.expandedIds.includes(node.id)) {
            acc.push(...flatten(node.children, level + 1))
          }
          return acc
        }, [])
      }
      return flatten(this.treeData)
    }
  },
  methods: {
    toggleExpand(item) {
      const index = this.expandedIds.indexOf(item.id)
      if (index > -1) {
        this.expandedIds.splice(index, 1)
      } else {
        this.expandedIds.push(item.id)
      }
    }
  }
}
</script>

每种方法适用于不同场景,递归组件适合简单需求,element-ui提供企业级解决方案,而自定义实现则提供最大灵活性。根据项目复杂度和需求选择合适的实现方式。

vue实现树形表格数据

标签: 表格数据
分享给朋友:

相关文章

Vue实现数据检验

Vue实现数据检验

Vue 数据校验的实现方法 在Vue中实现数据校验可以通过多种方式,以下是几种常见的方法: 使用内置指令 Vue提供了一些内置指令用于简单的数据校验,例如v-model结合v-bind可以实现基本的…

css表格表单制作

css表格表单制作

CSS表格制作 使用CSS创建表格主要涉及<table>标签及其子元素的样式控制。以下是一个基础示例: <table class="styled-table"> <…

vue日历表格实现

vue日历表格实现

实现Vue日历表格的基本步骤 使用Vue实现日历表格需要处理日期数据生成、渲染和交互逻辑。以下是核心实现方法: 安装依赖(可选) 若需复杂功能可引入date-fns或dayjs等日期库: np…

Vue数据依赖实现

Vue数据依赖实现

Vue数据依赖实现原理 Vue的数据依赖实现基于响应式系统,核心是通过Object.defineProperty或Proxy拦截数据变化,结合发布-订阅模式实现依赖收集和更新触发。 核心机制 依赖收…

vue实现数据删除

vue实现数据删除

Vue 实现数据删除的方法 在 Vue 中删除数据通常涉及操作数组或对象,并结合响应式更新。以下是几种常见实现方式: 从数组中删除数据 使用 splice 方法删除数组中的指定项: metho…

vue实现数据翻译

vue实现数据翻译

Vue 数据翻译实现方案 在 Vue 项目中实现数据翻译通常涉及国际化(i18n)或多语言支持,以下是几种常见方法: 使用 vue-i18n 插件 安装 vue-i18n 依赖: npm in…