【问题标题】:How can I create table with headers on the left and multiple rows in it如何创建带有左侧标题和多行的表格
【发布时间】:2019-03-05 17:52:02
【问题描述】:

我有一个表,其中可能有不同数量的列(标题)以及不同数量的数据。它正在使用v-for 填充。示例代码将是这样的:

     <div class="table-responsive">
        <table class="table">
            <thead><tr>
                <th v-for="header in table_headers">
                    <span>@{{header}}</span>
                </th>
            </tr></thead>
            <tbody>
                <tr v-for="body in table_body">
                    <td>
                       @{{body}}    
                    </td>
                </tr>
            </tbody>
        </table>
    </div>

这会创建如下所示的表:

+-------------+---------+---------+
|    Name     | Middle  | Surname |
+-------------+---------+---------+
| Christopher | Ashton  | Kutcher |
| William     | Bradley | Pitt    |
| Thomas      | Sean    | Connery |
+-------------+---------+---------+

如何将其转换为第一列有标题,第二列有所有数据的表格:

+---------+-------------+
| Name    | Christopher |
| Middle  | Ashton      |
| Surname | Kutcher     |
| ------- | ----------- |
| Name    | William     |
| Middle  | Bradley     |
| Surname | Pitt        |
| ------  | ----------- |
| Name    | Thomas      |
| Middle  | Sean        |
| Surname | Connery     |
+---------+-------------+

JSON 格式的数据:

{
  "columns": {
    "0": "Name",
    "1": "Middle",
    "2": "Surname"
  }
}

{
  "data": {
    "Name": ["Christopher", "William", "Thomas"],
    "Middle": ["Ashton", "Bradley", "Sean"],
    "Surname": ["Kutcher", "Pitt", "Connery"]
  }
}

【问题讨论】:

  • 在表格中,thead 不能位于 tbody 的左侧。如果您只想实现所显示的视觉结果(并且您不关心 HTML 的语义使用),那很容易做到。
  • 是的,我只需要视觉结果。你能给我一些指导方针吗?
  • 请以 JSON 格式发布数据。

标签: css vue.js twitter-bootstrap-3


【解决方案1】:

假设你有以下数据:

data() { return {
  names: [ 
    { "Name": "Christopher", "Middle": "Ashton", "Surname": "Kutcher" },
    { "Name": "William", "Middle": "Bradley", "Surname": "Pitt" },
    { "Name": "Thomas", "Middle": "Sean", "Surname": "Connery" },
  ]
}

这将是您的 HTML:

<table>
  <tr v-for="name in names">
    <td>
      <div v-for="key in Object.keys(name)">{{ key }}</div>
    </td>
    <td>
      <div v-for="value in Object.values(name)">{{ value }}</div>
    </td>
  </tr>
</table>

let template = `<table>
  <tr v-for="name in names">
    <td>
      <div v-for="key in Object.keys(name)">{{ key }}</div>
    </td>
    <td>
      <div v-for="value in Object.values(name)">{{ value }}</div>
    </td>
  </tr>
</table>`

new Vue({
  el: "#app",
  template,
  data() { return {
      names: [ 
        { "Name": "Christopher", "Middle": "Ashton", "Surname": "Kutcher" },
        { "Name": "William", "Middle": "Bradley", "Surname": "Pitt" },
        { "Name": "Thomas", "Middle": "Sean", "Surname": "Connery" },
      ]
    }
  }
});
<script src="https://vuejs.org/js/vue.min.js"></script>

<div id="app"></div>

【讨论】:

  • 将在一分钟内尝试,然后接受您的回答。谢谢!
  • 有没有办法使这两列的大小相同?我试过用&lt;div class="row"&gt; 包裹所有东西,后来在&lt;td&gt; 类中添加了这两个&lt;div&gt; 标签:&lt;div class="row"&gt;,但它没有帮助,而且它迫使它去inline 而不是block .
  • table { table-layout: fixed; } table td { width: 50%; }
  • 哇,现在速度非常快!是的,这可能是一种解决方案,但有人告诉我,我不能更改 css,而且由于在这个项目中我们使用的是引导程序,所以我应该使用它的类来修复所有问题。但是谢谢,如果我没有找到其他东西,我会用这个,谁在乎
  • @connexo 如何使用 template 语法和 export default 方式而不是 new Vue
猜你喜欢
  • 1970-01-01
  • 2021-08-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-11-10
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多