在Vue模板中渲染表

时间:2018-06-07 11:50:54

标签: vue.js html-table v-for

我正在尝试使用标题和正文数据从对象渲染表格:

const mydata = {header: {}, body: {}}

这会产生两个<table>元素:

<template>
  <div class="container" id="ProbabilityTable">
    <div id="v-for-object">
      <table>
        <div v-for="(data, key) in table(html)">

          <thead v-if="key === 'header'">
            // render table header
          </thead>

          <tbody v-if="key === 'body'">          
            // render table body
          </tbody>

        </div>
      </table>
    </div>
  </div>
</template>

是这样的:

<template>
  <div class="container" id="ProbabilityTable">
    <div id="v-for-object">
      <table>
        <div v-for="(data, key) in table(html)">

          <thead v-if="key === 'header'">
            // render table header
          </thead>
          <tbody v-if="key === 'body'">          
            // render body header
          </tbody>

        </div>
      </table>
    </div>
  </div>
</template>

生成一个被破坏的表,因为html表不应该在它们的中间有div。

有什么方法吗?

3 个答案:

答案 0 :(得分:1)

您可以使用<template></template>代码。

<template>标记不会将自身渲染为元素,但您可以将其用于vue中的条件和循环。

<template>
<div class="container" id="ProbabilityTable">
   <div id="v-for-object">
     <table>
      <template v-for="(data, key) in table(html)">
        <thead v-if="key === 'header'">
        // render table header
        </thead>
        <tbody v-if="key === 'body'">          
        // render body header
        </tbody>
      </template>
      </table>
      </div>
    </div>
</template>

答案 1 :(得分:0)

对标头进行一次for循环,然后将您的主体分开,则无需创建额外的div或模板。

<table>
  <thead>
    <tr v-for="(row, headerKey) in table(html).header" :key="headerKey">
      <td>{{ row }}</td>
    </tr>
  </thead>
  <tbody>
    <tr v-for="(row, bodyKey) in table(html).body" :key="bodyKey">
      <td>{{ row }}</td>
    </tr>
  </tbody>
</table>

答案 2 :(得分:-1)

您发布的2个片段的解释相同。而且他们都错了。

如此处所述https://developer.mozilla.org/en-US/docs/Web/HTML/Element/table div不是表格的有效内容。因此,每个浏览器都会以不同的方式解释错误。

解决方案:使用有效的HTML语法,看看问题是否仍然存在。