首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Vue中多维对象的呈现列表

Vue中多维对象的呈现列表
EN

Stack Overflow用户
提问于 2019-11-26 15:56:29
回答 1查看 62关注 0票数 0

假设有以下结构的JSON对象:

代码语言:javascript
复制
{
  "dimension-1": {
    "value1": "",
    "value2": "",
    "value3": "",
    "value4": ""
  },
  "dimension-2": {
    "value1": "",
    "value2": "",
    "value3": "",
    "value4": "",
    "dimension-2.1": {
      "value1": "",
      "dimension-2.2": {
        "value1": ""
      }
    }
  }
}

该对象可以有无限数量的嵌套,其数量为未知

我想要创建一个列表,它通过使用Vue列表呈现特性或类似的东西来表示JSON对象(如果可能的话)。最后,我会收到这样的消息:

代码语言:javascript
复制
<ul>
  <li>
    dimension-1
    <ul>
      <li>value-1</li>
      <li>value-2</li>
      <li>value-3</li>
      <li>value-4</li>
    </ul>
  </li>
  <li>
    dimension-2
    <ul>
      <li>value-1</li>
      <li>value-2</li>
      <li>value-3</li>
      <li>value-4</li>
      <li>
        dimension-2.1
        <ul>
          <li>value-1</li>
          <li>
            dimension-2.2
            <ul>
              <li>value1</li>
            </ul>
          </li>
        </ul>
      </li>
    </ul>
  </li>
</ul>

对于普通的JS,这很容易做到:

代码语言:javascript
复制
const object = {
  "dimension-1": {
    "value1": "",
    "value2": "",
    "value3": "",
    "value4": ""
  },
  "dimension-2": {
    "value1": "",
    "value2": "",
    "value3": "",
    "value4": "",
    "dimension-2.1": {
      "value1": "",
      "dimension-2.2": {
        "value1": ""
      }
    }
  }
}

function createHTML(json, isArray) {

  var html = '<ul>';
  for (var key in json) {
    if (typeof json[key] == 'object') {

      html += '<li>' + (!isArray ? '<strong>' + key + '</strong>' : '') + '</li>' + createHTML(json[key], (json[key] instanceof Array ? 1 : 0));
    } else {
      html += '<li>' + key + '</li>';
    }
  }
  return html + '</ul>';

}

document.getElementById('output').innerHTML = createHTML(object, false);
代码语言:javascript
复制
<div id="output"></div>

从这里复制和改变

但是,这显然不能工作,因为这部分html += '<li>' + (!isArray ? '<strong>' + key + '</strong>' : '') + '</li>' + -->createHTML(json[key], (json[key] instanceof Array ? 1 : 0))<--;

那么,我的问题的解决方案是什么,还是替代方案呢?

EN

回答 1

Stack Overflow用户

发布于 2019-11-26 20:38:05

我要做的就是和你做的JavaScript片段一样。您只需将document.getElementById部件与适当的Vue ref交换即可。

例如:

代码语言:javascript
复制
<template>
   <div>
      <ul ref="myList"></ul>
   </div>
</template>
<script>
export default {
  name: "Example",
  mounted() {
     const myList = this.$refs.myList;
     myList.innerHTML = "<li>One element</li>";
  }
};
</script>

不理想,因为你失去了Vue的部分,但快速和容易。如果您想在构建这个递归列表时获得更多的详细信息,您可以查看以下内容:https://alligator.io/vuejs/recursive-components/

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/59054771

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档