성장과정(dev)/Frontend(feat. Vue, Next.js)
vue bootstrap table로 row 하위에 table 출력하기 (table in table)
lowellSunny
2021. 10. 14. 18:04
vue bootstrap 의 b-table 을 이용하여 다음과 같이 table 안에 inner table 구조를 만들 수 있다.

방법은 row-details slot을 사용하면 된다.
https://bootstrap-vue.org/docs/components/table
BootstrapVue
Quickly integrate Bootstrap v4 components with Vue.js
bootstrap-vue.org
아래에 써놓은 옵션 이외에 필요한 기본옵션 관련해서는 BootstrapVue 공식사이트를 이용하면 된다.
옵션설명
* sticky-header : 스크롤로 테이블의 크기를 한정짓고 싶을 때 사용 ( 필자는 docs에서 해당옵션을 못보고 지나가 css로 삽질을 했음 )
* items : 나타내고 싶은 row data
* fields : header에서 출력할 column
* busy : 로딩바로 사용
<b-table
:sticky-header="true"
:items="amlSubmissions"
:fields="fields"
:busy="isBusy"
@row-clicked="handleRowClicked">
<!-- row-details 안에 들어가는 html 내용들은 row가 열릴 때 나타난다. (row 클릭 시 open toggle)-->
<template #row-details="row">
<b-table class="ml-5"
v-if="row.item.amlResult.length > 0"
:outlined="true"
:head-variant="'primary'"
:items="row.item.amlResult" :fields="matchesHeader">
<template #cell(report)="data">
<b-button variant="primary" @click="downloadAmlReport(data.item.argos_number)">Report</b-button>
</template>
<!-- full_name은 fields 에 나타나는 헤더 칼럼이름, 안에 출력하는 forename 데이터는 row에 출력되는 데이터 키이다. -->
<template #cell(full_name)="data">
<span>{{data.item.forename}}</span>
</template>
</b-table>
</template>
</b-table>