在bootstrap-vue的b表中添加第二个标题行

时间:2018-07-24 17:46:58

标签: vuejs2 bootstrap-vue

我有一个像这样的表头:

table header

我正在尝试在bootstrap-vue中重新创建此表。原始HTML看起来像这样(简化):

<table>
  <thead>
    <tr>
      <th></th>
      <th colspan="4">Group 1</th>
      <th colspan="4">Group 2</th>
      <!--etc-->
    </tr> 
    <tr>
      <th>Field</th>
      <th>Median</th>
      <!-- etc -->
    </tr>
  </thead>
  <tbody><!-- actual data --></tbody>
</table>

核心b表代码将轻松/自动创建第二行。我试图弄清楚如何在其中塞住第一行。有点麻烦的是,我需要能够控制两个组名的内容(即,如果它们在某个地方更改了控件,则“组1”将变为“组Foo”)。

我为需要起点帮助解决此问题的任何人创建了一个游乐场:https://codesandbox.io/s/p56y3y2lnx的目标是以编程方式添加第一行,其中包括group1name并跨越一张桌子上的桌子。

2 个答案:

答案 0 :(得分:2)

我无法找到一种干净的方法来获得想要的结果,所以最终我遇到了一些麻烦。

b-table上,您可以添加一个input事件,所以我这样做是为了知道表何时完成加载。

HTML:

<b-table @input="tableLoaded" ref="table"></b-table>

然后在我的方法中

tableLoaded() {
    if (!this.$refs.table) {
        return;
    }

    var headers = this.$refs.table.$el.querySelectorAll('thead tr');
    if (headers.length > 1) {
        return;//nothing to do, header row already created
    }

    var topHeader = document.createElement('tr');
    topHeader.innerHTML =
        '<th></th>'+
        '<th colspan="3">Group 1</th>'+
        '<th colspan="4">Group 2</th>'+
        '<th colspan="4"></th>';
    headers[0].parentNode.insertBefore(topHeader, headers[0]);
}

我很乐意接受更清洁的解决方案。

答案 1 :(得分:1)

从版本v2.0.0-rc.14(发布于2019-03-08)开始,您现在可以使用插槽thead-top在标头上方添加其他行。

例如,您将以下代码放在b-table标记内:

  <template slot="thead-top" slot-scope="data">
    <tr>
      <th></th>
      <th colspan="3">Group 1</th>
      <th colspan="4">Group 2</th>
      <th colspan="4"></th>
    </tr>
  </template>

这里是对新功能的引用:https://bootstrap-vue.js.org/docs/components/table/#adding-additional-rows-to-the-header