【问题标题】:Generating HTML list from hierarchy MySQL Table从层次结构 MySQL 表生成 HTML 列表
【发布时间】:2019-12-24 07:30:23
【问题描述】:

我有一个像这样的层次结构表

id| name         | parent_id | header 
1 | Assets       | 0         | Y
2 | Fixed Assets | 1         | Y
3 | Asset One    | 2         | N
4 | Income       | 1         | N

我通过 axios 提取这些数据并尝试以下面的方式呈现

我正在尝试生成这样的 UL LI 列表

<ul>
    <li id="asset-main-id">
        Assets
        <ul>
            <li id="fixed-asset-header">
                Fixed Assets
                <ul>
                    <li id="fa-asset-child-one">Asset One</li>
                </ul>
            </li>
            <li id="asset-child">Income Receiveables</li>
        </ul>
    </li>
</ul>

它会有多个父子关系,这意味着它可以达到 10 个级别。我对如何实现这一点感到困惑。

有人可以指导我实现这一目标吗?

虚拟负载

[{id: 1, name: assets, parent_id: 0, header:Y}, {id: 2, name: Fixed Assets, parent_id: 1, header:Y} ....]

【问题讨论】:

  • 你用的是什么版本的 MySQL?
  • MySQL 5.7 版
  • 问题是关于如何渲染或如何表示数据?如果您正在尝试实现其中之一,您可以附加一个虚拟有效载荷吗?
  • 我已经附加了有效载荷@OmerShacham
  • @Rehan 检查我的解决方案 :)

标签: javascript html vue.js


【解决方案1】:

我只想给你一个替代方案。 如果您可以更改表示数据的方式,那将会容易得多。它可能取决于对您提取数据的服务的控制权。

例子:

var data = {
  "id": 1,
  "name": "Assets",
  "header": true,
  "children": [
    {
      "id": 2,
      "name": "Fixed Assets",
      "header": true,
      "children": [
        {
          "id": 3,
          "name": "Asset One",
          "header": false
        }
      ]
    },
    {
      "id": 1,
      "name": "Income",
      "header": false
    }
  ]
}

之后,这个例子会引导你一个解决方案:https://vuejs.org/v2/examples/tree-view.html

【讨论】:

  • 我已经看过那个例子了。由于我使用JqxWidget 并在下拉列表中呈现树,因此小部件需要 ul,li 方式的数据。
【解决方案2】:

我建议您使用数据结构作为@The_Cute_Hedgehod 提供嵌套的父子关系。

我可以添加一个示例,如何将您当前的 ds 转换为它。

获得给定的有效负载后,您始终可以使用自定义 vue 组件对其进行渲染

您可以在此处找到完整的工作示例: https://codepen.io/omer-shacham/pen/xxbrxdO

示例数据

var data = [{
  "id": 1,
  "name": "Assets",
  "children": [
    {
      "id": 2,
      "name": "Fixed Assets",
      "children": [
        {
          "id": 3,
          "name": "Asset One",
        }
      ]
    },
    {
      "id": 1,
      "name": "Income",
    }
  ]
}

示例模板

<template>
    <li>
    {{ name }}
        <ul v-if="children.size > 0">
            <TreeNode v-for="child in children" :node="child"/>
        </ul>
    </li>
</template>

和你的根应用

<ul>
   <TreeNode v-for="child in root" :child="child"/>
</ul>

【讨论】:

  • 如果孩子有一些标题会发生什么?还能用吗?
  • @Rehan 你想在html中怎么表达?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2019-01-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多