【问题标题】:Vue to render tr array recursivelyVue递归渲染tr数组
【发布时间】:2019-12-10 18:01:21
【问题描述】:

我必须使用引导程序创建带有表数据的可折叠树。这看起来像下面这样

<tr><td>Parent node1</td><td>...</td><td>...</td></tr>
<tr><td>Subparent node1.1</td><td>...</td><td>...</td></tr>
<tr><td>Subsupparent node1.1.1</td><td>...</td><td>...</td></tr>
<tr><td>Subsupparent node1.1.2</td><td>...</td><td>...</td></tr>
<tr><td>Subparent node1.2</td><td>...</td><td>...</td></tr>
<tr><td>Subsupparent node2.1.1</td><td>...</td><td>...</td></tr>
<tr><td>Subsupparent node2.1.2</td><td>...</td><td>...</td></tr>

我决定在每个级别的 html 上创建 Vue 组件渲染,并通过递归使用自己的数据和子集:

<template id="tree-item">            
           <tr :key="currentNode.id">
                <span @click="setExpanded(currentNode)">
                    <div style="display: inline-block;">
                        <span class="treegrid-indent" :style="{width: 15 * level + 'px'}"></span>
                        <span class="treegrid-expander fa" :class="currentNode.isExpanded ?'fa-chevron-down':'fa-chevron-right'">
                        </span>
                    </div>
                    {{level}}  {{currentNode.id}}
                </span>
            </tr>
                <tree-item v-for="item in currentNode.items" :currentNode="item" :level="level+1"> </tree-item>       
</template>

但我得到 Vue 错误:组件模板应该只包含一个根元素。 有什么方法可以解决这个任务吗?

【问题讨论】:

标签: vuejs2


【解决方案1】:

如果您可以放宽使用列表而不是表格的要求,那么您可以尝试以下操作:

<div class="folder_container">
  <ul class="no_list no_space">
    <FolderTree :folder="folders" :level="0"/>
  </ul>
</div>

FolderTree 组件的模板如下所示:

<template>
  <li>
    <div>
      <div class="folder_name">{{ folder.name }}</div>
    </div>
    <ul v-if="folder.child && folder.child.length > 0" class="no_list no_space">
      <FolderTree
        v-for="(fold,idx) in folder.child"
        :key="fold.id"
        :folder="fold"
        :level="level + 1"
        :last="1 + idx === folder.child.length"
      />
    </ul>
  </li>
</template>

如果您需要使用表格 - 那么您必须以某种方式将嵌套对象转换为线性项目列表/数组。否则你将无法克服模板中只有 1 个根元素的限制(除非你使用渲染函数)。

【讨论】:

  • 关于您对我的表的代码:文件夹名称也必须与数据列一起,我在您的组件中看不到它
  • 这就是为什么我说“如果你能放宽你的要求”。您可以放置​​一个单行表格而不是 {{ folder_name}} 但这些表格将是您的每个项目的不同表格 - 因此除非您为表格列设置固定宽度,否则每个表格中的列将具有不同的宽度,具体取决于它们的文本内容。
猜你喜欢
  • 2021-03-10
  • 2020-09-11
  • 2018-06-14
  • 2018-12-10
  • 2019-12-21
  • 2020-09-08
  • 2019-04-23
  • 2018-09-10
  • 2020-12-22
相关资源
最近更新 更多