テーブル

表形式のデータを表示するために、<b-table> は、ページネーション、フィルタリング、ソート、カスタムレンダリング、さまざまなスタイルオプション、イベント、および非同期データをサポートしています。すべての高度な機能なしで表形式のデータを簡単に表示するには、BootstrapVue は2つの軽量な代替コンポーネント、<b-table-lite><b-table-simple> を提供します。

例:基本的な使用法

<template>
  <div>
    <b-table striped hover :items="items"></b-table>
  </div>
</template>

<script>
  export default {
    data() {
      return {
        items: [
          { age: 40, first_name: 'Dickerson', last_name: 'Macdonald' },
          { age: 21, first_name: 'Larsen', last_name: 'Shaw' },
          { age: 89, first_name: 'Geneva', last_name: 'Wilson' },
          { age: 38, first_name: 'Jami', last_name: 'Carney' }
        ]
      }
    }
  }
</script>

<!-- b-table.vue -->

アイテム(レコードデータ)

items は、配列形式のテーブルデータであり、各レコード(行)データはキー付きオブジェクトです。フォーマット例

const items = [
  { age: 32, first_name: 'Cyndi' },
  { age: 27, first_name: 'Havij' },
  { age: 42, first_name: 'Robert' }
]

<b-table> は、最初の行を自動的にサンプルしてフィールド名(レコードデータのキー)を抽出します。フィールド名は、kebab-casesnake_case、および camelCase を個々の単語に変換し、各単語を大文字にすることで自動的に「人間化」されます。変換例

  • first_nameFirst Name になります
  • last-nameLast Name になります
  • ageAge になります
  • YEARYEAR のままです
  • isActiveIs Active になります

これらのタイトルは、データ最初のレコードに表示される順序でテーブルヘッダーに表示されます。フィールド見出しの表示方法をカスタマイズするには、以下のフィールドセクションを参照してください。

注意: フィールドの順序は保証されていません。通常、フィールドは最初の行で定義された順序で表示されますが、使用中のブラウザのバージョンによってはそうでない場合があります。フィールドの順序を保証し、生成された見出しをオーバーライドする方法については、以下のフィールド(列定義)セクションを参照してください。

レコードデータには、行や個々のセル(バリアント)を色分けしたり、追加の行詳細をトリガーしたりするための特別な予約名キーを追加することもできます。サポートされているオプションのアイテムレコードモディファイアプロパティ(フィールドキーがこれらの名前と競合しないようにしてください)

プロパティ 説明
_cellVariants オブジェクト 個々のセルに適用される Bootstrap コンテキスト状態。フィールドでキー付けされます(サポートされる値については、カラーバリアントを参照してください)。これらのバリアントは、クラスtable-${variant} または bg-${variant} にマッピングされます(dark プロパティが設定されている場合)。
_rowVariant 文字列 行全体に適用される Bootstrap コンテキスト状態(サポートされる値については、カラーバリアントを参照してください)。これらのバリアントは、クラスtable-${variant} または bg-${variant} にマッピングされます(dark プロパティが設定されている場合)。
_showDetails ブール値 row-details スコープ付きスロットの表示をトリガーするために使用されます。詳細については、以下の行詳細のサポートセクションを参照してください

例:テーブルセルにバリアントを使用する

<template>
  <div>
    <b-table hover :items="items"></b-table>
  </div>
</template>

<script>
  export default {
    data() {
      return {
        items: [
          { age: 40, first_name: 'Dickerson', last_name: 'Macdonald' },
          { age: 21, first_name: 'Larsen', last_name: 'Shaw' },
          {
            age: 89,
            first_name: 'Geneva',
            last_name: 'Wilson',
            _rowVariant: 'danger'
          },
          {
            age: 40,
            first_name: 'Thor',
            last_name: 'MacDonald',
            _cellVariants: { age: 'info', first_name: 'warning' }
          },
          { age: 29, first_name: 'Dick', last_name: 'Dunlap' }
        ]
      }
    }
  }
</script>

<!-- b-table-variants.vue -->

items は、アイテムデータのArrayを返すプロバイダー関数への参照にすることもできます。プロバイダー関数は非同期にすることもできます

  • null(またはundefined)を返し、データが準備できたら、データ配列をコールバックへの唯一の引数としてコールバックを呼び出すことで、
  • 配列に解決するPromiseを返すことで。

詳細については、以下の「アイテムプロバイダー関数の使用」セクションを参照してください。

テーブルアイテムの注意事項と警告

  • 基礎となるアイテムデータの変更によって、行またはテーブル全体が再レンダリングされるため、レコードデータをインプレースで操作することは避けてください。行のVueの再レンダリングを最小限に抑える方法については、以下のプライマリキーを参照してください。
  • items 配列レコードは単純なオブジェクトであり、行内の値に循環参照がある可能性のあるデータを配置することは避ける必要があります。<b-table> は、ソートおよびフィルタリングのために行データを文字列にシリアル化し、循環参照はスタックオーバーフローを引き起こし、アプリがクラッシュします!

フィールド(列定義)

fields プロパティは、テーブル列の見出しをカスタマイズしたり、データの列を表示する順序をカスタマイズしたりするために使用されます。フィールドオブジェクトキー(つまり、以下に示すようにageまたはfirst_name)は、各アイテム(レコード)行から値を抽出したり、列のソートを有効にするなどの追加機能を提供したりするために使用されます。

フィールドは、単純な配列またはオブジェクトの配列として指定できます。内部では、フィールドデータはオブジェクトの配列形式に正規化されます。列fieldデータを含むイベントまたはスロットは、正規化されたフィールドオブジェクト形式になります(fieldsの場合はオブジェクトの配列、個々のfieldの場合はオブジェクト)。

単純な配列としてのフィールド

フィールドは、列の順序と表示する列を定義するための単純な配列にすることができます。

例:arrayフィールド定義の使用

<template>
  <div>
    <b-table striped hover :items="items" :fields="fields"></b-table>
  </div>
</template>

<script>
  export default {
    data() {
      return {
        // Note `isActive` is left out and will not appear in the rendered table
        fields: ['first_name', 'last_name', 'age'],
        items: [
          { isActive: true, age: 40, first_name: 'Dickerson', last_name: 'Macdonald' },
          { isActive: false, age: 21, first_name: 'Larsen', last_name: 'Shaw' },
          { isActive: false, age: 89, first_name: 'Geneva', last_name: 'Wilson' },
          { isActive: true, age: 38, first_name: 'Jami', last_name: 'Carney' }
        ]
      }
    }
  }
</script>

<!-- b-table-fields-array.vue -->

オブジェクトの配列としてのフィールド

フィールドはオブジェクトの配列にすることができ、フィールドの追加の制御(ソート、フォーマットなど)を提供します。フィールド配列に表示される列(キー)のみが表示されます

例:オブジェクトの配列フィールド定義の使用

<template>
  <div>
    <b-table striped hover :items="items" :fields="fields"></b-table>
  </div>
</template>

<script>
  export default {
    data() {
      return {
        // Note 'isActive' is left out and will not appear in the rendered table
        fields: [
          {
            key: 'last_name',
            sortable: true
          },
          {
            key: 'first_name',
            sortable: false
          },
          {
            key: 'age',
            label: 'Person age',
            sortable: true,
            // Variant applies to the whole column, including the header and footer
            variant: 'danger'
          }
        ],
        items: [
          { isActive: true, age: 40, first_name: 'Dickerson', last_name: 'Macdonald' },
          { isActive: false, age: 21, first_name: 'Larsen', last_name: 'Shaw' },
          { isActive: false, age: 89, first_name: 'Geneva', last_name: 'Wilson' },
          { isActive: true, age: 38, first_name: 'Jami', last_name: 'Carney' }
        ]
      }
    }
  }
</script>

<!-- b-table-fields-array-of-objects.vue -->

フィールド定義リファレンス

次のフィールドプロパティが認識されます

プロパティ 説明
key 文字列 アイテム配列のレコードからデータを選択するためのキー。fieldsをオブジェクトの配列で設定する場合は必須です。keyは、カスタムデータレンダリングおよびカスタムヘッダーとフッターのスロット名生成にも使用されます。
label 文字列 列テーブルヘッダー(およびfoot-cloneが設定されている場合はフッター)に表示されます。指定されていない場合は、フィールドのキー(人間化された形式)がデフォルトになります。空の文字列""を割り当てることで空のラベルを使用できますが、非視覚ユーザーに列の内容に関するヒントを提供するために、必ずheaderTitleも設定してください。
headerTitle 文字列 フィールドヘッダーの<th>属性titleに配置するテキスト。デフォルトではtitle属性はありません。
headerAbbr 文字列 フィールドヘッダーの<th>属性abbrに配置するテキスト。ラベル(またはタイトル)が省略形の場合は、これにラベル(またはタイトル)の省略されていないバージョンを設定します。デフォルトではabbr属性はありません。
class 文字列または配列 列の<th><td>に追加するクラス名(またはクラス名の配列)。
formatter 文字列または関数 フォーマッターコールバック関数またはコンポーネントのメソッドの名前。スコープ付きフィールドスロットの代わりに(または組み合わせて)使用できます。フォーマッターは構文formatter(value, key, item)で呼び出されます。詳細については、カスタムデータレンダリングを参照してください。
sortable ブール値 この列のソートを有効にします。詳細については、ソートセクションを参照してください。
sortKey 文字列 v2.17.0+ no-local-sortingtrue の場合、発行されるコンテキスト内の列の sortBy の値を設定します。
sortDirection 文字列 この列がソートされる際の初期ソート方向を設定します。詳しくは、初期ソート方向の変更のセクションを参照してください。
sortByFormatted 真偽値または関数 true に設定すると、フィールドの formatter コールバック関数の結果で列をソートします。デフォルトは false です。フィールドに formatter がない場合、真偽値は効果がありません。オプションで、ソート目的のみで値をフォーマットするためのフォーマッタ関数参照を受け入れます。詳しくは、ソートのセクションを参照してください。
filterByFormatted 真偽値または関数 true に設定すると、フィールドの formatter コールバック関数の結果で列をフィルタリングします。デフォルトは false です。フィールドに formatter がない場合、真偽値は効果がありません。オプションで、フィルタリング目的のみで値をフォーマットするためのフォーマッタ関数参照を受け入れます。詳しくは、フィルタリングのセクションを参照してください。
tdClass 文字列、配列、または関数 列の <tbody> データ <td> セルに追加するクラス名(またはクラス名の配列)。セルごとにカスタムクラスが必要な場合は、代わりにコールバック関数を指定できます。この関数は tdClass(value, key, item) として呼び出され、Array または String を返す必要があります。
thClass 文字列または配列 このフィールドの <thead>/<tfoot> ヘッダー <th> セルに追加するクラス名(またはクラス名の配列)。
thStyle オブジェクト テーブルの <thead>/<tfoot> フィールド <th> に適用する CSS スタイルを表す JavaScript オブジェクト。
variant 文字列 列のすべての <th> および <td> にコンテキストクラスを適用します - activesuccessinfowarningdanger。これらのバリアントは、クラス thead-${variant} (ヘッダー内)、table-${variant} (本体内)、または bg-${variant} (prop dark が設定されている場合) にマッピングされます。
tdAttr オブジェクトまたは関数 <tbody> フィールド <td> セルに適用する追加の属性を表す JavaScript オブジェクト。セルごとにカスタム属性が必要な場合は、代わりにコールバック関数を指定できます。この関数は tdAttr(value, key, item) として呼び出され、Object を返す必要があります。
thAttr オブジェクトまたは関数 フィールドの <thead>/<tfoot> ヘッダー <th> セルに適用する追加の属性を表す JavaScript オブジェクト。フィールドの isRowHeadertrue に設定されている場合、属性は <tbody> フィールド <th> セルにも適用されます。セルごとにカスタム属性が必要な場合は、代わりにコールバック関数を指定できます。この関数は thAttr(value, key, item, type) として呼び出され、Object を返す必要があります。
isRowHeader ブール値 true に設定すると、フィールドの項目データセルは、デフォルトの <td> ではなく、<th> でレンダリングされます。
stickyColumn ブール値 true に設定すると、レスポンシブモードのテーブルまたは固定ヘッダーがある場合、テーブルの水平スクロールバーがスクロールされると、列が左側に固定されます。詳しくは、固定列を参照してください。

  • フィールドプロパティは、特に明記されていない限り、存在しない場合はデフォルトで null (falsey) になります。
  • classthClasstdClass などは、VueLoader のディープセレクターを使用していない限り、スコープ付き CSS で定義されたクラスでは機能しません。
  • thStyle でサポートされている構文については、Vue.js ガイドのクラスとスタイルのバインディングを参照してください。
  • フィールド定義オブジェクトに追加された追加のプロパティはそのまま残ります。そのため、カスタムデータ、ヘッダー、およびフッターのレンダリング用の名前付きスコープ付きスロットからアクセスできます。

スコープ付きスロットとフォーマッタの使用方法については、以下のカスタムデータレンダリングのセクションを参照してください。

単純な配列とオブジェクト配列を自由に組み合わせてください

const fields = [
  { key: 'first_name', label: 'First' },
  { key: 'last_name', label: 'Last' },
  'age',
  'sex'
]

主キー

<b-table> は、行を一意に識別するフィールドキーの名前を識別するために使用できる追加のプロップ primary-key を提供します。

プライマリ列キーで指定された値は、string または number のいずれかでなければならず、テーブル内のすべての行で一意である必要があります

プライマリキー列は、表示されるフィールドに表示する必要はありません。

テーブル行 ID の生成

指定すると、primary-key は、各項目行の <tr> 要素に対して一意の ID を生成します。ID は {table-id}__row_{primary-key-value} の形式になります。ここで、{table-id}<b-table> の一意の ID であり、{primary-key-value}primary-key で指定されたフィールドの項目のフィールド値の値です。

テーブルのレンダリングとトランジションの最適化

primary-key は、Vue がテーブル行のレンダリングを最適化するのを支援するためにも <b-table> によって使用されます。内部的には、primary-key プロップで指定されたフィールドキーの値は、レンダリングされた各項目行の <tr> 要素の Vue の :key 値として使用されます。

レンダリングの問題 (つまり、項目データの変更時、またはデータがソート/フィルタリング/編集された際に、ツールチップが非表示になったり、予期しないサブコンポーネントの再利用が発生したりする場合) が発生している場合、またはテーブル行のトランジションが機能していない場合は、primary-key プロップ (行ごとに一意の識別子がある場合) を設定すると、これらの問題を軽減できます。

primary-key 列の指定は、サードパーティのテーブルトランジションやドラッグアンドドロッププラグインを使用している場合に便利です。これらは、行ごとに一貫性のある一意の :key 値を持つことに依存しているためです。

primary-key が指定されていない場合、<b-table> は、表示される行のインデックス番号 (つまり、表示されたテーブル行での位置) に基づいてキーを自動生成します。これにより、以前の結果でレンダリングされているサブコンポーネント/要素 (つまり、Vue のレンダリングパッチ最適化ルーチンによって再利用されている) など、GUI の問題が発生する可能性があります。primary-key 列を指定すると、この問題を軽減できます (または、カスタムフォーマットされたフィールドスロットの要素/コンポーネントに一意の :key を配置できます)。

詳細については、テーブル本体のトランジションのサポートのセクションを参照してください。

テーブルスタイルのオプション

テーブルのスタイリング

<b-table> は、テーブルのスタイルを変更するためのいくつかのプロップを提供します

プロップ 説明
striped ブール値 <tbody> 内のテーブル行にストライプを適用します
bordered ブール値 テーブルとセルのすべての辺に境界線を適用します。
borderless ブール値 テーブルから内側の境界線を削除します。
outlined ブール値 テーブルのすべての辺に細い境界線を適用します。bordered が設定されている場合は効果がありません。
small ブール値 セルのパディングを半分にすることで、テーブルをよりコンパクトにします。
hover ブール値 <tbody> 内のテーブル行でホバー強調表示状態を有効にします
dark ブール値 色を反転します - 暗い背景に明るいテキストを使用します (Bootstrap v4 クラス .table-dark と同等)
fixed ブール値 等しい固定幅の列を持つテーブルを生成します (table-layout: fixed;)
responsive 真偽値または文字列 水平方向にスクロールできるように、レスポンシブテーブルを生成します。常にレスポンシブテーブルにするには true に設定するか、'sm''md''lg'、または 'xl' のいずれかのブレークポイントに設定して、テーブルをブレークポイントよりも小さい画面でのみレスポンシブ (水平方向にスクロール) にします。詳しくは、以下のレスポンシブテーブルを参照してください。
sticky-header 真偽値または文字列 固定ヘッダー付きの垂直スクロール可能なテーブルを生成します。固定ヘッダーを有効にするには true に設定するか (デフォルトのテーブルの最大高さは 300px)、300px 以外の最大高さを指定するには、高さ (CSS ユニット付き) を含む文字列に設定します。詳しくは、以下の固定ヘッダーのセクションを参照してください。
stacked 真偽値または文字列 レスポンシブスタックテーブルを生成します。常にスタックテーブルにするには true に設定するか、'sm''md''lg'、または 'xl' のいずれかのブレークポイントに設定して、テーブルをブレークポイントよりも小さい画面でのみ視覚的にスタックします。詳しくは、以下のスタックテーブルを参照してください。
caption-top ブール値 テーブルにキャプションがあり、このプロップが true に設定されている場合、キャプションはテーブルの上に視覚的に配置されます。false (デフォルト) の場合、キャプションはテーブルの下に視覚的に配置されます。
table-variant 文字列 テーブル全体にテーマカラーのバリアントを付与します。
head-variant 文字列 'light' または 'dark' を使用して、テーブルヘッダーをそれぞれライトグレーまたはダークグレーで表示します
foot-variant 文字列 'light' または 'dark' を使用して、テーブルフッターをそれぞれライトグレーまたはダークグレーで表示します。設定しない場合、head-variant が使用されます。foot-clone が設定されていない場合は効果がありません
foot-clone ブール値 テーブルフッターをオンにし、テーブルヘッダーと同じ内容をデフォルトとします
no-footer-sorting ブール値 foot-clone が true でテーブルがソート可能な場合、フッターヘッダーセルでのソートアイコンとクリック動作を無効にします。詳しくは、以下のソートのセクションを参照してください。
no-border-collapse ブール値 テーブルの境界線のデフォルトの折り畳みを無効にします。主に固定ヘッダー固定列で使用します。状況によっては二重の境界線のように見えることがあります。

注意: テーブルスタイルのオプションであるfixedstackedcaption-topno-border-collapse、固定ヘッダー、固定列、およびテーブルのソート機能は、すべてBootstrapVueのカスタムCSSが必要です。

例: 基本的なテーブルスタイル

<template>
  <div>
    <b-form-group label="Table Options" label-cols-lg="2" v-slot="{ ariaDescribedby }">
      <b-form-checkbox v-model="striped" :aria-describedby="ariaDescribedby" inline>Striped</b-form-checkbox>
      <b-form-checkbox v-model="bordered" :aria-describedby="ariaDescribedby" inline>Bordered</b-form-checkbox>
      <b-form-checkbox v-model="borderless" :aria-describedby="ariaDescribedby" inline>Borderless</b-form-checkbox>
      <b-form-checkbox v-model="outlined" :aria-describedby="ariaDescribedby" inline>Outlined</b-form-checkbox>
      <b-form-checkbox v-model="small" :aria-describedby="ariaDescribedby" inline>Small</b-form-checkbox>
      <b-form-checkbox v-model="hover" :aria-describedby="ariaDescribedby" inline>Hover</b-form-checkbox>
      <b-form-checkbox v-model="dark" :aria-describedby="ariaDescribedby" inline>Dark</b-form-checkbox>
      <b-form-checkbox v-model="fixed" :aria-describedby="ariaDescribedby" inline>Fixed</b-form-checkbox>
      <b-form-checkbox v-model="footClone" :aria-describedby="ariaDescribedby" inline>Foot Clone</b-form-checkbox>
      <b-form-checkbox v-model="noCollapse" :aria-describedby="ariaDescribedby" inline>No border collapse</b-form-checkbox>
    </b-form-group>

    <b-form-group label="Head Variant" label-cols-lg="2" v-slot="{ ariaDescribedby }">
      <b-form-radio-group
        v-model="headVariant"
        :aria-describedby="ariaDescribedby"
        class="mt-lg-2"
      >
        <b-form-radio :value="null" inline>None</b-form-radio>
        <b-form-radio value="light" inline>Light</b-form-radio>
        <b-form-radio value="dark" inline>Dark</b-form-radio>
      </b-form-radio-group>
    </b-form-group>

    <b-form-group label="Table Variant" label-for="table-style-variant" label-cols-lg="2">
      <b-form-select
        id="table-style-variant"
        v-model="tableVariant"
        :options="tableVariants"
      >
        <template #first>
          <option value="">-- None --</option>
        </template>
      </b-form-select>
    </b-form-group>

    <b-table
      :striped="striped"
      :bordered="bordered"
      :borderless="borderless"
      :outlined="outlined"
      :small="small"
      :hover="hover"
      :dark="dark"
      :fixed="fixed"
      :foot-clone="footClone"
      :no-border-collapse="noCollapse"
      :items="items"
      :fields="fields"
      :head-variant="headVariant"
      :table-variant="tableVariant"
    ></b-table>
  </div>
</template>

<script>
  export default {
    data() {
      return {
        fields: ['first_name', 'last_name', 'age'],
        items: [
          { age: 40, first_name: 'Dickerson', last_name: 'Macdonald' },
          { age: 21, first_name: 'Larsen', last_name: 'Shaw' },
          { age: 89, first_name: 'Geneva', last_name: 'Wilson' }
        ],
        tableVariants: [
          'primary',
          'secondary',
          'info',
          'danger',
          'warning',
          'success',
          'light',
          'dark'
        ],
        striped: false,
        bordered: false,
        borderless: false,
        outlined: false,
        small: false,
        hover: false,
        dark: false,
        fixed: false,
        footClone: false,
        headVariant: null,
        tableVariant: '',
        noCollapse: false
      }
    }
  }
</script>

<!-- b-table-bordered.vue -->

行のスタイリングと属性

また、tbody-tr-classプロパティを使用してすべての行をスタイル設定したり、必要に応じてtbody-tr-attrプロパティを介して追加の属性を指定したりできます。

プロパティ 説明
tbody-tr-class 文字列、配列、または関数 テーブルのすべての行に適用されるクラス。関数が指定された場合、tbodyTrClass( item, type )として呼び出され、ArrayObject、またはStringを返すことができます。
tbody-tr-attr オブジェクトまたは関数 テーブルのすべての行に適用される属性。関数が指定された場合、tbodyTrAttr( item, type )として呼び出され、Objectを返す必要があります。

tbody-tr-classまたはtbody-tr-attrに関数参照を渡す場合、関数の引数は次のようになります。

  • item - 行に関連付けられた項目レコードデータ。項目レコードに関連付けられていない行の場合、この値はnullまたはundefinedになります。
  • type - レンダリングされる行のタイプ。項目行の場合は'row'、項目詳細行の場合は'row-details'、固定行トップ スロットの場合は'row-top'、固定行ボトム スロットの場合は'row-bottom'、テーブルビジー スロットの場合は'table-busy'です。

例: 基本的な行スタイル

<template>
  <div>
    <b-table :items="items" :fields="fields" :tbody-tr-class="rowClass"></b-table>
  </div>
</template>

<script>
  export default {
    data() {
      return {
        fields: ['first_name', 'last_name', 'age'],
        items: [
          { age: 40, first_name: 'Dickerson', last_name: 'Macdonald', status: 'awesome' },
          { age: 21, first_name: 'Larsen', last_name: 'Shaw' },
          { age: 89, first_name: 'Geneva', last_name: 'Wilson' }
        ]
      }
    },
    methods: {
      rowClass(item, type) {
        if (!item || type !== 'row') return
        if (item.status === 'awesome') return 'table-success'
      }
    }
  }
</script>

<!-- b-table-styled-row.vue -->

レスポンシブテーブル

レスポンシブテーブルを使用すると、テーブルを簡単に水平方向にスクロールできます。responsiveプロパティをtrueに設定することで、すべてのビューポートでテーブルをレスポンシブにできます。または、responsiveプロパティをブレークポイント値(smmdlg、またはxl)のいずれかに設定することで、レスポンシブテーブルにする最大ブレークポイントを選択します。

例: 常にレスポンシブなテーブル

<template>
  <div>
    <b-table responsive :items="items"></b-table>
  </div>
</template>

<script>
  export default {
    data() {
      return {
        items: [
          {
            heading1: 'table cell',
            heading2: 'table cell',
            heading3: 'table cell',
            heading4: 'table cell',
            heading5: 'table cell',
            heading6: 'table cell',
            heading7: 'table cell',
            heading8: 'table cell',
            heading9: 'table cell',
            heading10: 'table cell',
            heading11: 'table cell',
            heading12: 'table cell'
          },
          {
            heading1: 'table cell',
            heading2: 'table cell',
            heading3: 'table cell',
            heading4: 'table cell',
            heading5: 'table cell',
            heading6: 'table cell',
            heading7: 'table cell',
            heading8: 'table cell',
            heading9: 'table cell',
            heading10: 'table cell',
            heading11: 'table cell',
            heading12: 'table cell'
          },
          {
            heading1: 'table cell',
            heading2: 'table cell',
            heading3: 'table cell',
            heading4: 'table cell',
            heading5: 'table cell',
            heading6: 'table cell',
            heading7: 'table cell',
            heading8: 'table cell',
            heading9: 'table cell',
            heading10: 'table cell',
            heading11: 'table cell',
            heading12: 'table cell'
          }
        ]
      }
    }
  }
</script>

<!-- b-table-responsive.vue -->

レスポンシブテーブルの注意点

  • 垂直方向のクリッピング/切り捨ての可能性。レスポンシブテーブルはoverflow-y: hiddenを使用しており、テーブルの下端または上端を超えるコンテンツは切り捨てられます。特に、ドロップダウンメニューやその他のサードパーティのウィジェットが切り取られる可能性があります。
  • responsivefixedのプロパティを一緒に使用すると、期待どおりに動作しません。固定テーブルレイアウトは、最初の行(この場合はテーブルヘッダー)を使用して、各列(およびテーブル全体の幅)に必要な幅を計算し、親コンテナの幅内に収まるようにします。このとき、<tbody>内のセルは考慮されないため、レスポンシブではないテーブルになる可能性があります。この制限を回避するには、次のいずれかの方法で列(または特定の列)の幅を指定する必要があります。

スタックテーブル

レスポンシブテーブルの代替として、BootstrapVueには、視覚的に積み重ねられた形式でテーブルをレンダリングできるスタックテーブルオプション(カスタムSCSS/CSSを使用)が含まれています。stackedプロパティをtrueに設定することで、すべてのビューポートでテーブルをスタック表示にできます。または、stackedプロパティをブレークポイント値'sm''md''lg'、または'xl'のいずれかに設定することで、テーブルが通常のテーブル形式に戻るブレークポイントを設定することもできます。

列ヘッダーラベルは、CSS ::before疑似要素を使用して、各フィールド値の左側に40%の幅でレンダリングされます。

stackedプロパティは、sticky-headerプロパティと、stickyColumnフィールド定義プロパティよりも優先されます。

例: 常にスタックされるテーブル

<template>
  <div>
    <b-table stacked :items="items"></b-table>
  </div>
</template>

<script>
  export default {
    data() {
      return {
        items: [
          { age: 40, first_name: 'Dickerson', last_name: 'Macdonald' },
          { age: 21, first_name: 'Larsen', last_name: 'Shaw' },
          { age: 89, first_name: 'Geneva', last_name: 'Wilson' }
        ]
      }
    }
  }
</script>

<!-- b-table-stacked.vue -->

注意: テーブルが視覚的にスタックされている場合

  • テーブルヘッダー(およびテーブルフッター)は非表示になります。
  • カスタムレンダリングされたヘッダースロットは表示されず、代わりにフィールドのlabelが使用されます。
  • テーブルは、レンダリングされたフィールドラベルをクリックしてソートすることはできません。ソートするフィールドとソート方向を選択するための外部コントロールを提供する必要があります。ソートコントロールの詳細については、以下のソートセクションを参照してください。また、フォームコントロールを使用したソートの制御例については、このページの下部にある完全な例を参照してください。
  • スロットtop-rowbottom-rowは、視覚的にスタックされている場合は非表示になります。
  • テーブルキャプションが提供されている場合、視覚的にスタックされているときは常にテーブルの上部に表示されます。
  • 常にスタックされたテーブルでは、テーブルヘッダーとフッター、および固定された上部と下部の行スロットはレンダリングされません。

スタックテーブルをサポートするには、BootstrapVueのカスタムCSSが必要です。

テーブルキャプション

プロパティcaptionまたは名前付きスロットtable-captionを使用して、オプションのキャプションをテーブルに追加します(スロットはプロパティよりも優先されます)。デフォルトのBootstrap v4スタイルでは、キャプションはテーブルの下部に配置されます。

<template>
  <div>
    <b-table :items="items" :fields="fields">
      <template #table-caption>This is a table caption.</template>
    </b-table>
  </div>
</template>

<script>
  export default {
    data() {
      return {
        fields: ['first_name', 'last_name', 'age'],
        items: [
          { age: 40, first_name: 'Dickerson', last_name: 'Macdonald' },
          { age: 21, first_name: 'Larsen', last_name: 'Shaw' },
          { age: 89, first_name: 'Geneva', last_name: 'Wilson' }
        ]
      }
    }
  }
</script>

<!-- b-table-caption.vue -->

caption-topプロパティをtrueに設定することで、キャプションをテーブルの上部に配置できます。

<template>
  <div>
    <b-table :items="items" :fields="fields" caption-top>
      <template #table-caption>This is a table caption at the top.</template>
    </b-table>
  </div>
</template>

<script>
  export default {
    data() {
      return {
        fields: ['first_name', 'last_name', 'age'],
        items: [
          { age: 40, first_name: 'Dickerson', last_name: 'Macdonald' },
          { age: 21, first_name: 'Larsen', last_name: 'Shaw' },
          { age: 89, first_name: 'Geneva', last_name: 'Wilson' }
        ]
      }
    }
  }
</script>

<!-- b-table-caption-top.vue -->

また、カスタムCSSを使用して、キャプションの配置を制御することもできます。

テーブルcolgroup

名前付きスロットtable-colgroupを使用して、テーブル列のオプションのグループ化とスタイリングのための<colgroup>および<col>要素を指定します。<col>要素で利用可能なスタイルは制限されていることに注意してください。<colgroup>の詳細と使用法については、MDNを参照してください。

スロットtable-colgroupは、オプションでスコープされ、次のプロパティを持つオブジェクトを受け取ることができます。

プロパティ 説明
columns 数値 レンダリングされたテーブルの列数
fields 配列 フィールド定義オブジェクトの配列(オブジェクトの配列形式に正規化)

提供されている場合、table-colgroupスロットの内容は、<colgroup>要素に配置されます。独自の外部<colgroup>要素を提供する必要はありません。テーブル列のシリーズを支援技術上の理由でグループ化する必要がある場合(論理的な列の関連付けを伝えるため)、<col span="#">要素(#をグループ化された列の数に置き換えたもの)を使用して、列のシリーズをグループ化します。

ヒント: <col>要素のstyleまたはclassを介して列の幅を設定しようとする場合、テーブルをfixedヘッダー幅(テーブル固定レイアウトモード)モードにし、responsive(水平スクロール)モードと組み合わせると役立つ場合があります。ただし、各列の<col>要素に対応するスタイルまたはクラスを介して、明示的な幅または最小幅を設定する必要があります。例:

<b-table fixed responsive :items="items" :fields="fields" ... >
  <template #table-colgroup="scope">
    <col
      v-for="field in scope.fields"
      :key="field.key"
      :style="{ width: field.key === 'foo' ? '120px' : '180px' }"
    >
  </template>
  <!-- additional table slots here if needed -->
</b-table>

テーブルのビジー状態

<b-table> は、テーブルがビジー状態であることを示す busy プロパティを提供します。アイテムを更新する直前に true に設定し、アイテムを取得したら false に設定します。ビジー状態の場合、テーブルには属性 aria-busy="true" が設定されます。

ビジー状態の間、テーブルは「ミュート」された外観(opacity: 0.6)でレンダリングされ、次のカスタムCSSが使用されます。

/* Busy table styling */
table.b-table[aria-busy='true'] {
  opacity: 0.6;
}

このスタイルは、独自のCSSを使用して上書きできます。

必要に応じて、テーブルのビジー状態が true のときにカスタムのローディングメッセージまたはスピナーを表示するために、table-busy スロットを提供できます。スロットは、クラス b-table-busy-slot を持つ <tr> 要素に配置され、フィールド数に設定された colspan を持つ単一の <td> が含まれます。

table-busy スロットの使用例

<template>
  <div>
    <b-button @click="toggleBusy">Toggle Busy State</b-button>

    <b-table :items="items" :busy="isBusy" class="mt-3" outlined>
      <template #table-busy>
        <div class="text-center text-danger my-2">
          <b-spinner class="align-middle"></b-spinner>
          <strong>Loading...</strong>
        </div>
      </template>
    </b-table>
  </div>
</template>

<script>
  export default {
    data() {
      return {
        isBusy: false,
        items: [
          { first_name: 'Dickerson', last_name: 'MacDonald', age: 40 },
          { first_name: 'Larsen', last_name: 'Shaw', age: 21 },
          { first_name: 'Geneva', last_name: 'Wilson', age: 89 },
          { first_name: 'Jami', last_name: 'Carney', age: 38 }
        ]
      }
    },
    methods: {
      toggleBusy() {
        this.isBusy = !this.isBusy
      }
    }
  }
</script>

<!-- b-table-busy-slot.vue -->

また、アイテムプロバイダー関数の使用 で、busy 状態に関する追加情報も参照してください。

  • テーブルが busy 状態の場合、すべてのクリック関連イベント、ホバーイベント、およびソート変更イベントは発生しません
  • ビジースタイルとスロットは、<b-table-lite> コンポーネントでは使用できません。

カスタムデータレンダリング

行内の各データフィールドのカスタムレンダリングは、スコープ付きスロット、フォーマッターコールバック関数、または両方の組み合わせを使用して可能です。

スコープ付きフィールドスロット

スコープ付きフィールドスロットを使用すると、レコードデータの表示方法をより詳細に制御できます。スコープ付きスロットを使用して、特定のフィールドのカスタムレンダリングを提供できます。レコードに存在しない追加のフィールドを追加する場合は、fields 配列に追加し、スコープ付きスロットでフィールドを参照します。スコープ付きフィールドスロットは、次の命名構文を使用します。'cell(' + field key + ')'

明示的なスコープ付きスロットが提供されていないセルをフォーマットするために、デフォルトのフォールバックスコープ付きスロット 'cell()' を使用できます。

例:スコープ付きスロットを使用したカスタムデータレンダリング

<template>
  <div>
    <b-table small :fields="fields" :items="items" responsive="sm">
      <!-- A virtual column -->
      <template #cell(index)="data">
        {{ data.index + 1 }}
      </template>

      <!-- A custom formatted column -->
      <template #cell(name)="data">
        <b class="text-info">{{ data.value.last.toUpperCase() }}</b>, <b>{{ data.value.first }}</b>
      </template>

      <!-- A virtual composite column -->
      <template #cell(nameage)="data">
        {{ data.item.name.first }} is {{ data.item.age }} years old
      </template>

      <!-- Optional default data cell scoped slot -->
      <template #cell()="data">
        <i>{{ data.value }}</i>
      </template>
    </b-table>
  </div>
</template>

<script>
  export default {
    data() {
      return {
        fields: [
          // A virtual column that doesn't exist in items
          'index',
          // A column that needs custom formatting
          { key: 'name', label: 'Full Name' },
          // A regular column
          'age',
          // A regular column
          'sex',
          // A virtual column made up from two fields
          { key: 'nameage', label: 'First name and age' }
        ],
        items: [
          { name: { first: 'John', last: 'Doe' }, sex: 'Male', age: 42 },
          { name: { first: 'Jane', last: 'Doe' }, sex: 'Female', age: 36 },
          { name: { first: 'Rubin', last: 'Kincade' }, sex: 'Male', age: 73 },
          { name: { first: 'Shirley', last: 'Partridge' }, sex: 'Female', age: 62 }
        ]
      }
    }
  }
</script>

<!-- b-table-data-slots.vue -->

スロットのスコープ変数(上記の例では data)には、次のプロパティがあります。

プロパティ 説明
index 数値 表示されている行に対する行番号(0から始まるインデックス)
item オブジェクト この行の生のレコードデータ全体(つまり、items[index])(フォーマッターが適用される前)
value 任意 レコード内のこのキーの値(仮想列の場合はnullまたはundefined)、またはフィールドのformatter関数の出力
unformatted 任意 アイテムレコード内のこのキーの生の値を(仮想列の場合はnullまたはundefined)、フィールドのformatter関数に渡される前
field オブジェクト フィールドの正規化されたフィールド定義オブジェクト
detailsShowing ブール値 行の row-details スコープ付きスロットが表示されている場合は true になります。詳細については、以下の 行の詳細サポート セクションを参照してください。
toggleDetails 関数 行の row-details スコープ付きスロットの表示/非表示を切り替えるために呼び出すことができます。詳細については、以下の 行の詳細サポート セクションを参照してください。
rowSelected ブール値 行が選択されている場合は true になります。詳細については、行の選択サポート セクションを参照してください。
selectRow 関数 呼び出されると、現在の行を選択します。詳細については、行の選択サポート セクションを参照してください。
unselectRow 関数 呼び出されると、現在の行の選択を解除します。詳細については、行の選択サポート セクションを参照してください。

  • index は、フィルター処理、ソート、およびページネーションが元のテーブルデータに適用された後に計算されるため、常に実際の行のインデックス番号になるとは限りません。index 値は、表示されている行番号を参照します。この番号は、オプションのv-model バインドされた変数のインデックスと一致します。
  • 新しい Vue 2.6 の v-slot 構文を使用する場合、スロット名にスペースを含めることはできません。また、ブラウザ内 DOM テンプレートを使用する場合、スロット名は常に小文字になります。これを回避するには、Vueの動的スロット名を使用してスロット名を渡すことができます。

生のHTMLの表示

デフォルトでは、b-table はアイテムデータとフォーマッター関数の結果に含まれるHTMLタグをエスケープします。b-table で生のHTMLコードを表示する必要がある場合は、スコープ付きフィールドスロット内の要素でv-html ディレクティブを使用する必要があります。

<template>
  <div>
    <b-table :items="items">
      <template #cell(html)="data">
        <span v-html="data.value"></span>
      </template>
    </b-table>
  </div>
</template>

<script>
  export default {
    data() {
      return {
        items: [
          {
            text: 'This is <i>escaped</i> content',
            html: 'This is <i>raw <strong>HTML</strong></i> <span style="color:red">content</span>'
          }
        ]
      }
    }
  }
</script>

<!-- b-table-html-data-slots.vue -->

警告: v-html メソッドを使用してユーザーが提供したコンテンツを表示する場合は、アプリケーションがXSS攻撃に対して脆弱になる可能性があるため注意が必要です。最初にユーザーが提供した文字列をサニタイズしない場合。

フォーマッターコールバック

オプションで、フォーマッターコールバック関数を使用してフィールド出力をカスタマイズできます。これを有効にするには、フィールドの formatter プロパティを使用します。このプロパティの値は、文字列または関数参照にすることができます。文字列値の場合、関数は親コンポーネントのメソッドで定義する必要があります。formatterFunction として提供する場合は、this コンテキストにバインドされていない限り、グローバルスコープ(ウィンドウ、またはVueでのグローバルミックスイン、または匿名関数として)で宣言する必要があります。

コールバック関数は、valuekey、および item の3つの引数を受け取り、フォーマットされた値を文字列として返す必要があります(HTML文字列はサポートされていません)。

例:フォーマッターコールバック関数を使用したカスタムデータレンダリング

<template>
  <div>
    <b-table :fields="fields" :items="items">
      <template #cell(name)="data">
        <!-- `data.value` is the value after formatted by the Formatter -->
        <a :href="`#${data.value.replace(/[^a-z]+/i,'-').toLowerCase()}`">{{ data.value }}</a>
      </template>
    </b-table>
  </div>
</template>

<script>
  export default {
    data() {
      return {
        fields: [
          {
            // A column that needs custom formatting,
            // calling formatter 'fullName' in this app
            key: 'name',
            label: 'Full Name',
            formatter: 'fullName'
          },
          // A regular column
          'age',
          {
            // A regular column with custom formatter
            key: 'sex',
            formatter: value => {
              return value.charAt(0).toUpperCase()
            }
          },
          {
            // A virtual column with custom formatter
            key: 'birthYear',
            label: 'Calculated Birth Year',
            formatter: (value, key, item) => {
              return new Date().getFullYear() - item.age
            }
          }
        ],
        items: [
          { name: { first: 'John', last: 'Doe' }, sex: 'Male', age: 42 },
          { name: { first: 'Jane', last: 'Doe' }, sex: 'Female', age: 36 },
          { name: { first: 'Rubin', last: 'Kincade' }, sex: 'male', age: 73 },
          { name: { first: 'Shirley', last: 'Partridge' }, sex: 'female', age: 62 }
        ]
      }
    },
    methods: {
      fullName(value) {
        return `${value.first} ${value.last}`
      }
    }
  }
</script>

<!-- b-table-data-formatter.vue -->

テーブルの thead および tfoot 要素のカスタムレンダリングを提供することも可能です。デフォルトでは、foot-clonetrue に設定されていない限り、テーブルフッターはレンダリングされないことに注意してください。

ヘッダーおよびフッターセル用のスコープ付きスロットは、'head(<fieldkey>)' および 'foot(<fieldkey>)' の特別な命名規則を使用します。フィールドの 'foot(...)' スロットが提供されていないが、'head(...)' スロットが提供されている場合、フッターは 'head(...)' スロットのコンテンツを使用します。

明示的なスコープ付きスロットが提供されていないヘッダーまたはフッターセルをフォーマットするために、デフォルトのフォールバックスコープ付きスロット 'head()' または 'foot()' を使用できます。

<template>
  <div>
    <b-table :fields="fields" :items="items" foot-clone>
      <!-- A custom formatted data column cell -->
      <template #cell(name)="data">
        {{ data.value.first }} {{ data.value.last }}
      </template>

      <!-- A custom formatted header cell for field 'name' -->
      <template #head(name)="data">
        <span class="text-info">{{ data.label.toUpperCase() }}</span>
      </template>

      <!-- A custom formatted footer cell for field 'name' -->
      <template #foot(name)="data">
        <span class="text-danger">{{ data.label }}</span>
      </template>

      <!-- Default fall-back custom formatted footer cell -->
      <template #foot()="data">
        <i>{{ data.label }}</i>
      </template>
    </b-table>
  </div>
</template>

<script>
  export default {
    data() {
      return {
        fields: [
          // A column that needs custom formatting
          { key: 'name', label: 'Full Name' },
          // A regular column
          'age',
          // A regular column
          'sex'
        ],
        items: [
          { name: { first: 'John', last: 'Doe' }, sex: 'Male', age: 42 },
          { name: { first: 'Jane', last: 'Doe' }, sex: 'Female', age: 36 },
          { name: { first: 'Rubin', last: 'Kincade' }, sex: 'Male', age: 73 },
          { name: { first: 'Shirley', last: 'Partridge' }, sex: 'Female', age: 62 }
        ]
      }
    }
  }
</script>

<!-- b-table-head-foot-slots.vue -->

スロットはオプションでスコープ設定可能であり(上記の例では data)、次のプロパティを持ちます。

プロパティ 説明
column 文字列 フィールドのkey
field オブジェクト フィールドのオブジェクト(fields プロパティから)
label 文字列 フィールドのラベル値(data.field.label としても利用可能)
selectAllRows メソッド selectable モードの場合、すべての行を選択します。
clearSelected メソッド selectable モードの場合、すべての行の選択を解除します。

head(...) または foot(...) スロット内に入力、ボタン、選択、またはリンクを配置する場合、入力、選択、テキストエリアがクリックされたときに(無効にされていない限り)head-clicked イベントは発生しません。スコープ付きスロット内のリンクまたはボタンをクリックしても、head-clicked は(無効になっている場合でも)発生しません。

  • 新しい Vue 2.6 の v-slot 構文を使用する場合、スロット名にスペースを含めることはできません。また、ブラウザ内 DOM テンプレートを使用する場合、スロット名は常に小文字になります。これを回避するには、Vueの動的スロット名を使用してスロット名を渡すことができます。

ヘッダーへの追加行の追加

ヘッダーに行を追加する場合は、thead-top スロットを使用します。このスロットはヘッダーセルの行の前に挿入され、<tr>..</tr> タグで自動的にカプセル化されません。ネイティブブラウザのテーブル子要素ではなく、BootstrapVue テーブルヘルパーコンポーネントを使用することをお勧めします。

<template>
  <div>
    <b-table
      :items="items"
      :fields="fields"
      responsive="sm"
    >
      <template #thead-top="data">
        <b-tr>
          <b-th colspan="2"><span class="sr-only">Name and ID</span></b-th>
          <b-th variant="secondary">Type 1</b-th>
          <b-th variant="primary" colspan="3">Type 2</b-th>
          <b-th variant="danger">Type 3</b-th>
        </b-tr>
      </template>
    </b-table>
  </div>
</template>

<script>
  export default {
    data() {
      return {
        items: [
          { name: 'Stephen Hawking', id: 1, type1: false, type2a: true, type2b: false, type2c: false, type3: false },
          { name: 'Johnny Appleseed', id: 2, type1: false, type2a: true, type2b: true, type2c: false, type3: false },
          { name: 'George Washington', id: 3, type1: false, type2a: false, type2b: false, type2c: false, type3: true },
          { name: 'Albert Einstein', id: 4, type1: true, type2a: false, type2b: false, type2c: true, type3: false },
          { name: 'Isaac Newton', id: 5, type1: true, type2a: true, type2b: false, type2c: true, type3: false },
        ],
        fields: [
          'name',
          { key: 'id', label: 'ID' },
          { key: 'type1', label: 'Type 1' },
          { key: 'type2a', label: 'Type 2A' },
          { key: 'type2b', label: 'Type 2B' },
          { key: 'type2c', label: 'Type 2C' },
          { key: 'type3', label: 'Type 3' }
        ]
      }
    }
  }
</script>

<!-- b-table-thead-top-slot.vue -->

スロット thead-top は、オプションでスコープ設定可能であり、次のプロパティを持つオブジェクトを受け取ります。

プロパティ 説明
columns 数値 レンダリングされたテーブルの列数
fields 配列 フィールド定義オブジェクトの配列(オブジェクトの配列形式に正規化されています)
selectAllRows メソッド selectable モードの場合、すべての行を選択します。
clearSelected メソッド selectable モードの場合、すべての行の選択を解除します。

<tfoot> のコンテンツのレイアウトをより詳細に制御する必要がある場合は、オプションでスコープ設定可能なスロット custom-foot を使用して、独自の行とセルを提供できます。BootstrapVue のテーブルヘルパーサブコンポーネント <b-tr><b-th>、および <b-td> を使用して、カスタムフッターレイアウトを生成します。

スロット custom-foot は、オプションでスコープ設定可能であり、次のプロパティを持つオブジェクトを受け取ります。

プロパティ 説明
columns 数値 レンダリングされたテーブルの列数
fields 配列 フィールド定義オブジェクトの配列(オブジェクトの配列形式に正規化されています)
items 配列 フィルタリング、ソート、ページネーション後の、現在表示されているアイテムレコードの配列

  • custom-foot スロットは、foot-clone プロパティが設定されている場合、レンダリングされません
  • head-clicked イベントは、custom-foot セルをクリックしても発行されません。
  • ソートとソートアイコンは、custom-foot スロットのセルでは利用できません。
  • カスタムフッターは、テーブルが視覚的にスタックモードの場合には表示されません。

スロットによるカスタムの空とフィルタリングされた空のレンダリング

empty-textempty-filtered-textempty-html、および empty-filtered-html を使用する以外に、名前付きスロットを使用して、表示するデータがないテーブルのカスタムレンダリングを提供することも可能です。

これらのスロットを表示するには、show-empty 属性を設定する必要があり、items は偽の値または長さ 0 の配列である必要があります。

<div>
  <b-table :fields="fields" :items="items" show-empty>
    <template #empty="scope">
      <h4>{{ scope.emptyText }}</h4>
    </template>
    <template #emptyfiltered="scope">
      <h4>{{ scope.emptyFilteredText }}</h4>
    </template>
  </b-table>
</div>

スロットはオプションでスコープ付きにできます。スロットのスコープ(上記の例の scope)には、次のプロパティがあります。

プロパティ 説明
emptyHtml 文字列 empty-html プロパティ
emptyText 文字列 empty-text プロパティ
emptyFilteredHtml 文字列 empty-filtered-html プロパティ
emptyFilteredText 文字列 empty-filtered-text プロパティ
fields 配列 fields プロパティ
items 配列 items プロパティ。nullと[]をチェックするためにここに公開されています。

高度な機能

固定ヘッダー

sticky-header プロパティを使用して、テーブル本体がスクロールするときにヘッダーが固定されたままになる(スティッキー)垂直スクロールテーブルを有効にします。プロパティを true (または明示的な値なし)に設定すると、最大高さが 300px のテーブルが生成されます。300px 以外の最大高さを指定するには、sticky-header プロパティを有効な CSS 高さ(単位を含む)、つまり sticky-header="200px" に設定します。sticky-header が有効になっているテーブルは、テーブルが利用可能な水平スペースよりも広い場合、responsive プロパティ設定に関係なく、常に水平方向にレスポンシブになります。

<template>
  <div>
    <b-table sticky-header :items="items" head-variant="light"></b-table>
  </div>
</template>

<script>
  export default {
    data() {
      return {
        items: [
          { heading1: 'table cell', heading2: 'table cell', heading3: 'table cell' },
          { heading1: 'table cell', heading2: 'table cell', heading3: 'table cell' },
          { heading1: 'table cell', heading2: 'table cell', heading3: 'table cell' },
          { heading1: 'table cell', heading2: 'table cell', heading3: 'table cell' },
          { heading1: 'table cell', heading2: 'table cell', heading3: 'table cell' },
          { heading1: 'table cell', heading2: 'table cell', heading3: 'table cell' },
          { heading1: 'table cell', heading2: 'table cell', heading3: 'table cell' },
          { heading1: 'table cell', heading2: 'table cell', heading3: 'table cell' },
          { heading1: 'table cell', heading2: 'table cell', heading3: 'table cell' },
          { heading1: 'table cell', heading2: 'table cell', heading3: 'table cell' },
          { heading1: 'table cell', heading2: 'table cell', heading3: 'table cell' },
          { heading1: 'table cell', heading2: 'table cell', heading3: 'table cell' }
        ]
      }
    }
  }
</script>

<!-- b-table-sticky-header.vue -->

固定ヘッダーの注意事項

  • テーブルに stacked プロパティが設定されている場合、sticky-header プロパティは効果がありません。
  • 固定ヘッダーテーブルは、最大高さが設定された垂直スクロール可能な <div> 内にラップされます。
  • sticky-header をサポートするには、BootstrapVue のカスタム CSS が必要です。
  • Bootstrap v4 は、テーブル要素で CSS スタイル border-collapse: collapsed を使用します。これにより、固定ヘッダーの境界線がヘッダーに「くっつく」ことができなくなり、したがって、本体がスクロールすると境界線がスクロールします。この問題を回避するには、テーブルでプロパティ no-border-collapse を設定します(これは、bordered などの機能を使用すると、二重幅の境界線を引き起こす可能性があることに注意してください)。
  • 固定ヘッダー機能は、見出しを配置するために CSS スタイル position: sticky を使用します。Internet Explorer は position: sticky をサポートしていないため、IE 11 の場合、テーブルの見出しはテーブル本体と一緒にスクロールします。

固定列

列を固定にすることができます。テーブルに水平スクロールバーがある場合、テーブルの左側に固定されます。列を固定列にするには、フィールドのヘッダー定義stickyColumn プロパティを設定します。固定列は、テーブルに sticky-header プロパティが設定されている場合、および/または responsive プロパティが設定されている場合にのみ機能します。

例:固定列とヘッダー

<template>
  <div>
    <div class="mb-2">
      <b-form-checkbox v-model="stickyHeader" inline>Sticky header</b-form-checkbox>
      <b-form-checkbox v-model="noCollapse" inline>No border collapse</b-form-checkbox>
    </div>
    <b-table
      :sticky-header="stickyHeader"
      :no-border-collapse="noCollapse"
      responsive
      :items="items"
      :fields="fields"
    >
      <!-- We are using utility class `text-nowrap` to help illustrate horizontal scrolling -->
      <template #head(id)="scope">
        <div class="text-nowrap">Row ID</div>
      </template>
      <template #head()="scope">
        <div class="text-nowrap">
          Heading {{ scope.label }}
        </div>
      </template>
    </b-table>
  </div>
</template>

<script>
  export default {
    data() {
      return {
        stickyHeader: true,
        noCollapse: false,
        fields: [
          { key: 'id', stickyColumn: true, isRowHeader: true, variant: 'primary' },
          'a',
          'b',
          { key: 'c', stickyColumn: true, variant: 'info' },
          'd',
          'e',
          'f',
          'g',
          'h',
          'i',
          'j',
          'k',
          'l'
        ],
        items: [
          { id: 1, a: 0, b: 1, c: 2, d: 3, e: 4, f: 5, g: 6, h: 7, i: 8, j: 9, k: 10, l: 11 },
          { id: 2, a: 0, b: 1, c: 2, d: 3, e: 4, f: 5, g: 6, h: 7, i: 8, j: 9, k: 10, l: 11 },
          { id: 3, a: 0, b: 1, c: 2, d: 3, e: 4, f: 5, g: 6, h: 7, i: 8, j: 9, k: 10, l: 11 },
          { id: 4, a: 0, b: 1, c: 2, d: 3, e: 4, f: 5, g: 6, h: 7, i: 8, j: 9, k: 10, l: 11 },
          { id: 5, a: 0, b: 1, c: 2, d: 3, e: 4, f: 5, g: 6, h: 7, i: 8, j: 9, k: 10, l: 11 },
          { id: 6, a: 0, b: 1, c: 2, d: 3, e: 4, f: 5, g: 6, h: 7, i: 8, j: 9, k: 10, l: 11 },
          { id: 7, a: 0, b: 1, c: 2, d: 3, e: 4, f: 5, g: 6, h: 7, i: 8, j: 9, k: 10, l: 11 },
          { id: 8, a: 0, b: 1, c: 2, d: 3, e: 4, f: 5, g: 6, h: 7, i: 8, j: 9, k: 10, l: 11 },
          { id: 9, a: 0, b: 1, c: 2, d: 3, e: 4, f: 5, g: 6, h: 7, i: 8, j: 9, k: 10, l: 11 },
          { id: 10, a: 0, b: 1, c: 2, d: 3, e: 4, f: 5, g: 6, h: 7, i: 8, j: 9, k: 10, l: 11 }
        ]
      }
    }
  }
</script>

<!-- table-sticky-columns.vue -->

固定列の注意事項

  • テーブルに stacked プロパティが設定されている場合、固定列は効果がありません。
  • 固定列テーブルには、sticky-header および/または responsive モードのいずれかが必要で、水平スクロール可能な <div> 内にラップされます。
  • stickyColumn として設定されている複数の列がある場合、列は視覚的に互いに積み重ねられ、左端の固定列は次の固定列の下から「のぞき見」する可能性があります。この動作を回避するには、後者の固定列が前の固定列と同じ幅またはそれよりも広いことを確認してください。
  • Bootstrap v4 は、テーブル要素で CSS スタイル border-collapse: collapsed を使用します。これにより、固定列の境界線が列に「くっつく」ことができなくなり、したがって、本体がスクロールするとこれらの境界線がスクロールします。この問題を回避するには、テーブルでプロパティ no-border-collapse を設定します(これは、bordered などの機能を使用すると、二重幅の境界線を引き起こす可能性があることに注意してください)。
  • 固定列をサポートするには、BootstrapVue のカスタム CSS が必要です。
  • 固定列機能は、列セルを配置するために CSS スタイル position: sticky を使用します。Internet Explorer は position: sticky をサポートしていないため、IE 11 の場合、固定列はテーブル本体と一緒にスクロールします。

行の詳細サポート

(フィールド定義配列で指定されていない列など)追加のレコード情報をオプションで表示したい場合は、特別なアイテムレコードのブール型プロパティ _showDetails と組み合わせて、スコープ付きスロット row-details を使用できます。

レコードの _showDetails プロパティが true に設定されており、かつ row-details スコープ付きスロットが存在する場合、新しい行がアイテムのすぐ下に表示され、row-details スコープ付きスロットのレンダリングされた内容が表示されます。

スコープ付きフィールドスロットで、フィールドのスコープ付きスロット変数に渡された toggleDetails 関数を呼び出すことで、行の row-details スコープ付きスロットの表示/非表示を切り替えることができます。スコープ付きフィールドスロット変数 detailsShowing を使用して、row-details スロットの表示/非表示を判断できます。

注:アイテムデータで _showDetails プロパティを直接操作する場合(つまり、toggleDetails 関数参照を使用しない場合)、_showDetails は、その値の変更を適切にリアクティブに検出するために、アイテムデータに必ず存在している必要があります。詳細については、Vue のリアクティビティの制限を参照してください。

利用可能な row-details スコープ付き変数プロパティ

プロパティ 説明
item オブジェクト 行レコードデータオブジェクト全体
index 数値 現在の表示行番号
fields 配列 正規化されたフィールド定義配列(オブジェクトの配列形式)
toggleDetails 関数 行の詳細スロットの表示/非表示を切り替える関数
rowSelected ブール値 行が選択されている場合は true になります。詳細については、行の選択サポート セクションを参照してください。
selectRow 関数 呼び出されると、現在の行を選択します。詳細については、行の選択サポート セクションを参照してください。
unselectRow 関数 呼び出されると、現在の行の選択を解除します。詳細については、行の選択サポート セクションを参照してください。

注:行選択に関連するスコーププロパティは、<b-table> でのみ利用可能です。

次の例では、詳細の表示/非表示を切り替える2つの方法を示します。1つはボタンを使用し、もう1つはチェックボックスを使用します。また、3行目の詳細は、最初は詳細が表示されるようにデフォルト設定されています。

<template>
  <div>
    <b-table :items="items" :fields="fields" striped responsive="sm">
      <template #cell(show_details)="row">
        <b-button size="sm" @click="row.toggleDetails" class="mr-2">
          {{ row.detailsShowing ? 'Hide' : 'Show'}} Details
        </b-button>

        <!-- As `row.showDetails` is one-way, we call the toggleDetails function on @change -->
        <b-form-checkbox v-model="row.detailsShowing" @change="row.toggleDetails">
          Details via check
        </b-form-checkbox>
      </template>

      <template #row-details="row">
        <b-card>
          <b-row class="mb-2">
            <b-col sm="3" class="text-sm-right"><b>Age:</b></b-col>
            <b-col>{{ row.item.age }}</b-col>
          </b-row>

          <b-row class="mb-2">
            <b-col sm="3" class="text-sm-right"><b>Is Active:</b></b-col>
            <b-col>{{ row.item.isActive }}</b-col>
          </b-row>

          <b-button size="sm" @click="row.toggleDetails">Hide Details</b-button>
        </b-card>
      </template>
    </b-table>
  </div>
</template>

<script>
  export default {
    data() {
      return {
        fields: ['first_name', 'last_name', 'show_details'],
        items: [
          { isActive: true, age: 40, first_name: 'Dickerson', last_name: 'Macdonald' },
          { isActive: false, age: 21, first_name: 'Larsen', last_name: 'Shaw' },
          {
            isActive: false,
            age: 89,
            first_name: 'Geneva',
            last_name: 'Wilson',
            _showDetails: true
          },
          { isActive: true, age: 38, first_name: 'Jami', last_name: 'Carney' }
        ]
      }
    }
  }
</script>

<!-- b-table-details.vue -->

行選択サポート

<b-table> プロパティ selectable を使用して、行を選択可能にすることができます。

ユーザーは、select-mode プロパティを設定することにより、選択モードを簡単に変更できます。

  • 'multi':クリックするたびに、行が選択/選択解除されます(デフォルトモード)
  • 'single':一度に1つの行のみを選択できます
  • 'range':クリックした行はすべて選択され、その他の行はすべて選択解除されます。Shift + クリックで行範囲を選択し、Ctrl(または Cmd)+ クリックで選択した行を切り替えます。

テーブルが selectable で、ユーザーが行をクリックすると、<b-table> は、選択された項目の完全なリストである単一の引数を渡して、row-selected イベントを発行します。この引数は読み取り専用として扱ってください。

行は、<b-table> インスタンスで公開されている次のメソッドを介して(つまり、this.$refs を介してテーブルインスタンスへの参照を介して)プログラムで選択および選択解除することもできます。

メソッド 説明
selectRow(index) 指定された index 番号で行を選択します。
unselectRow(index) 指定された index 番号で行の選択を解除します。
selectAllRows() テーブルのすべての行を選択します。ただし、single モードでは、最初の行のみが選択されます。
clearSelected() すべての行の選択を解除します。
isRowSelected(index) 指定された index の行が選択されている場合は true を返し、それ以外の場合は false を返します。

プログラムによる行選択の注意事項

  • index は、フィルタリング、ソート、およびページネーションが適用された後のテーブルの表示行のゼロベースのインデックスです。
  • single モードでは、selectRow(index) は以前に選択した行の選択を解除します。
  • 存在しない行で selectRow(index) または unselectRow(index) を試行しても無視されます。
  • これらのメソッドを有効にするには、テーブルが selectable である必要があります。
  • no-select-on-click プロパティを設定することで、クリックイベントによる行の選択を無効にできます。その後、行はプログラムによってのみ選択可能になります。

行選択に関する注意事項

  • ソートフィルタリング、またはページネーションを行うと、アクティブな選択がクリアされます。必要に応じて、row-selectedイベントが空の配列([])とともに発行されます。
  • テーブルがselectableモードの場合、すべてのデータアイテムの<tr>要素は、アクセシビリティのために、ドキュメントのタブシーケンス(tabindex="0")に含まれ、行の選択状態に応じて、aria-selected属性が'true'または'false'に設定されます。
  • テーブルがselectableの場合、テーブルには、singleモードの場合は'false'multiまたはrangeモードの場合は'true'のいずれかに設定されたaria-multiselect属性が設定されます。

<b-table>が選択可能な場合、b-table-selectableクラスを持ち、使用されているモードに応じて、<table>要素に次の3つのクラスのいずれかが設定されます。

  • b-table-select-single
  • b-table-select-multi
  • b-table-select-range

少なくとも1つの行が選択されている場合、b-table-selectingクラスが<table>要素でアクティブになります。選択された行には、<tr>要素にb-table-row-selectedクラスが適用されます。

選択された行にBootstrapテーマの色を適用するには、prop selected-variantを使用します。ただし、BootstrapのCSSでテーブルのバリアントが定義される順序により、row-variantはselected-variantよりも優先される可能性があります。selected-variantを空の文字列に設定すると、行が選択されていることを伝えるための他の手段(以下の例のようにスコープ付きフィールドスロットなど)を使用できます。

selected-variantは、標準(またはカスタム)Bootstrapベースカラーバリアント、または特定の行やセルバリアントよりも優先される特別なテーブルのactiveバリアント(デフォルト)のいずれかです。

アクセシビリティ上の理由(特に色覚異常のユーザーや色のコントラストの問題があるユーザーの場合)、以下に示す例のように、仮想列など、行が選択されていることを示す他の視覚的な手段を常に提供することを強くお勧めします。

<template>
  <div>
    <b-form-group
      label="Selection mode:"
      label-for="table-select-mode-select"
      label-cols-md="4"
    >
      <b-form-select
        id="table-select-mode-select"
        v-model="selectMode"
        :options="modes"
        class="mb-3"
      ></b-form-select>
    </b-form-group>

    <b-table
      :items="items"
      :fields="fields"
      :select-mode="selectMode"
      responsive="sm"
      ref="selectableTable"
      selectable
      @row-selected="onRowSelected"
    >
      <!-- Example scoped slot for select state illustrative purposes -->
      <template #cell(selected)="{ rowSelected }">
        <template v-if="rowSelected">
          <span aria-hidden="true">&check;</span>
          <span class="sr-only">Selected</span>
        </template>
        <template v-else>
          <span aria-hidden="true">&nbsp;</span>
          <span class="sr-only">Not selected</span>
        </template>
      </template>
    </b-table>
    <p>
      <b-button size="sm" @click="selectAllRows">Select all</b-button>
      <b-button size="sm" @click="clearSelected">Clear selected</b-button>
      <b-button size="sm" @click="selectThirdRow">Select 3rd row</b-button>
      <b-button size="sm" @click="unselectThirdRow">Unselect 3rd row</b-button>
    </p>
    <p>
      Selected Rows:<br>
      {{ selected }}
    </p>
  </div>
</template>

<script>
  export default {
    data() {
      return {
        modes: ['multi', 'single', 'range'],
        fields: ['selected', 'isActive', 'age', 'first_name', 'last_name'],
        items: [
          { isActive: true, age: 40, first_name: 'Dickerson', last_name: 'Macdonald' },
          { isActive: false, age: 21, first_name: 'Larsen', last_name: 'Shaw' },
          { isActive: false, age: 89, first_name: 'Geneva', last_name: 'Wilson' },
          { isActive: true, age: 38, first_name: 'Jami', last_name: 'Carney' }
        ],
        selectMode: 'multi',
        selected: []
      }
    },
    methods: {
      onRowSelected(items) {
        this.selected = items
      },
      selectAllRows() {
        this.$refs.selectableTable.selectAllRows()
      },
      clearSelected() {
        this.$refs.selectableTable.clearSelected()
      },
      selectThirdRow() {
        // Rows are indexed from 0, so the third row is index 2
        this.$refs.selectableTable.selectRow(2)
      },
      unselectThirdRow() {
        // Rows are indexed from 0, so the third row is index 2
        this.$refs.selectableTable.unselectRow(2)
      }
    }
  }
</script>

<!-- b-table-selectable.vue -->

テーブル本体のトランジションサポート

Vueのトランジションとアニメーションは、内部でVueの<transition-group>コンポーネントを使用することにより、オプションで<tbody>要素でサポートされます。トランジションサポートには3つのpropsが利用可能です(すべてデフォルトは未定義です)。

Prop 説明
tbody-transition-props オブジェクト transition-groupプロパティのオブジェクト
tbody-transition-handlers オブジェクト transition-groupイベントハンドラーのオブジェクト
primary-key 文字列 一意の行キーとして使用するフィールドを指定する文字列(必須)

トランジションを有効にするには、tbody-transition-propsおよび/またはtbody-transition-handlersを指定する必要があり、primary-key propを介して一意のキーとして使用するフィールドキーを指定する必要があります。トランジションを正常に機能させるには、データに、(primary-key propをフィールドの名前に設定することで指定される)列が必須で、各行に一意の値が必要です。primary-keyフィールドのは、一意の文字列または数値のいずれかになります。指定されたフィールドは、レンダリングされたテーブル出力に表示される必要はありませんが、アイテムデータの各行に必須で存在する必要があります。

プロジェクトで(CSSトランジションを使用する場合)トランジションを処理するためのCSSも提供する必要があります。

Vueのリストレンダリングトランジションの詳細については、Vue JS公式ドキュメントを参照してください。

以下の例では、次のカスタムCSSを使用しました。

table#table-transition-example .flip-list-move {
  transition: transform 1s;
}
<template>
  <div>
    <b-table
      id="table-transition-example"
      :items="items"
      :fields="fields"
      striped
      small
      primary-key="a"
      :tbody-transition-props="transProps"
    ></b-table>
  </div>
</template>

<script>
  export default {
    data() {
      return {
        transProps: {
          // Transition name
          name: 'flip-list'
        },
        items: [
          { a: 2, b: 'Two', c: 'Moose' },
          { a: 1, b: 'Three', c: 'Dog' },
          { a: 3, b: 'Four', c: 'Cat' },
          { a: 4, b: 'One', c: 'Mouse' }
        ],
        fields: [
          { key: 'a', sortable: true },
          { key: 'b', sortable: true },
          { key: 'c', sortable: true }
        ]
      }
    }
  }
</script>

<!-- b-table-transitions.vue -->

v-modelバインディング

変数をv-model propにバインドすると、この変数の内容は、現在表示されているアイテムレコード(0ベースのインデックス、page-size - 1まで)になります。この変数(value prop)は通常、読み取り専用として扱う必要があります。

v-model内のレコードは、itemsのフィルタリング/ページネーションされた浅いコピーであるため、v-modelのレコードのプロパティに対する変更は、元のitems配列に反映されます(ただし、itemsがプロバイダー関数に設定されている場合を除きます)。v-model配列からレコードを削除しても、元のアイテム配列からレコードが削除されたり、表示された行から削除されたりすることはありません。

注意: value propに値を直接バインドしないでください。v-modelバインディングを使用してください。

ソート

上記のフィールドセクションで説明したように、<b-table>で列をソート可能にすることができます。ソート可能な列ヘッダーをクリックすると、列が昇順(最小が最初)でソートされ、再度クリックすると、ソートの方向が降順(最大が最初)に切り替わります。ソート不可能な列をクリックすると、ソートがクリアされます(prop no-sort-resetを使用すると、この機能を無効にできます)。

どの列が事前にソートされるか、およびソートの順序(昇順または降順)を制御できます。ソートする列を事前に指定するには、sort-by propをフィールドのキーに設定します。ソートの方向を設定するには、sort-desctrue(降順の場合)またはfalse(昇順、デフォルトの場合)に設定します。

  • 昇順: アイテムは最小から最大にソートされます(つまり、AからZ)。最初の行に最小値が表示され、次の行に徐々に高い値が表示されます。
  • 降順: アイテムは最大から最小にソートされます(つまり、ZからA)。最初の行に最大値が表示され、次の行に徐々に低い値が表示されます。

props sort-byおよびsort-descは、.sync修飾子を追加することにより、双方向(同期可能)propsに変換できます。バインドされた変数は、現在のソート基準に基づいて適切に更新されます。.sync prop修飾子の詳細については、Vueドキュメントを参照してください。

sort-byを、フィールドでsortableとして定義されていない列に設定すると、テーブルがソートされなくなります。

prop foot-cloneが設定されている場合、フッターのヘッダーをクリックしてソートすることもできます。カスタム形式のフッターフィールドヘッダーがある場合でも同様です。フッターのヘッダークリックによるソートアイコンとソートを無効にするには、no-footer-sorting propをtrueに設定します。

<template>
  <div>
    <b-table
      :items="items"
      :fields="fields"
      :sort-by.sync="sortBy"
      :sort-desc.sync="sortDesc"
      responsive="sm"
    ></b-table>

    <div>
      Sorting By: <b>{{ sortBy }}</b>, Sort Direction:
      <b>{{ sortDesc ? 'Descending' : 'Ascending' }}</b>
    </div>
  </div>
</template>

<script>
  export default {
    data() {
      return {
        sortBy: 'age',
        sortDesc: false,
        fields: [
          { key: 'last_name', sortable: true },
          { key: 'first_name', sortable: true },
          { key: 'age', sortable: true },
          { key: 'isActive', sortable: false }
        ],
        items: [
          { isActive: true, age: 40, first_name: 'Dickerson', last_name: 'Macdonald' },
          { isActive: false, age: 21, first_name: 'Larsen', last_name: 'Shaw' },
          { isActive: false, age: 89, first_name: 'Geneva', last_name: 'Wilson' },
          { isActive: true, age: 38, first_name: 'Jami', last_name: 'Carney' }
        ]
      }
    }
  }
</script>

<!-- b-table-sorting.vue -->

ソートアイコンの配置

デフォルトでは、ソートアイコンはヘッダーセルに右揃えで表示されます。<b-table>でprop sort-icon-leftを設定することにより、アイコンを左揃えに変更できます。

<template>
  <div>
    <b-table
      :items="items"
      :fields="fields"
      :sort-by.sync="sortBy"
      :sort-desc.sync="sortDesc"
      sort-icon-left
      responsive="sm"
    ></b-table>

    <div>
      Sorting By: <b>{{ sortBy }}</b>, Sort Direction:
      <b>{{ sortDesc ? 'Descending' : 'Ascending' }}</b>
    </div>
  </div>
</template>

<script>
  export default {
    data() {
      return {
        sortBy: 'age',
        sortDesc: false,
        fields: [
          { key: 'last_name', sortable: true },
          { key: 'first_name', sortable: true },
          { key: 'age', sortable: true },
          { key: 'isActive', sortable: false }
        ],
        items: [
          { isActive: true, age: 40, first_name: 'Dickerson', last_name: 'Macdonald' },
          { isActive: false, age: 21, first_name: 'Larsen', last_name: 'Shaw' },
          { isActive: false, age: 89, first_name: 'Geneva', last_name: 'Wilson' },
          { isActive: true, age: 38, first_name: 'Jami', last_name: 'Carney' }
        ]
      }
    }
  }
</script>

<!-- b-table-sorting-left.vue -->

ソートアイコンのカスタマイズ

ソートアイコンは、SVG背景画像を使用して生成されます。アイコンは、BootstrapVueのSASS/SCSS変数を更新し、SCSSソースコードを再コンパイルすることで変更できます。BootstrapおよびBootstrapVueで生成されたCSSのカスタマイズの詳細については、テーマセクションを参照してください。

ソート比較ルーチン

内部の組み込みデフォルトのsort-compare関数は、基になるレコードオブジェクトのデータに基づいて、指定されたフィールドkeyをソートします(または、フィールドにフォーマッタ関数があり、フィールドのsortByFormattedプロパティがtrueに設定されている場合は、書式設定された値でソートします)。フィールド値がオブジェクトの場合は、最初に文字列化されてからソートされます。

  • 組み込みのsort-compareルーチンは、フィールドデータのカスタムレンダリングに基づいてソートすることはできません。スコープ付きスロットは表示のみに使用され、基になるデータには影響しません。
  • formatter関数(仮想フィールドまたは通常のフィールド)を持つフィールドは、フィールドプロパティsortByFormattedtrueに設定されている場合、フォーマッタ関数を介して返される値でソートできます。オプションで、ソート前に値をフォーマットするために、フォーマッタ関数参照をsortByFormattedに渡すことができます。デフォルトはfalseで、元のフィールド値でソートされます。これは、組み込みのソート比較ルーチンにのみ適用されます。
  • デフォルトでは、内部ソートルーチンはnullundefined、または空の文字列値を最初にソートします(他の値よりも小さい)。nullundefined、または空の文字列値が最後(他の値よりも大きい)に表示されるようにソートするには、sort-null-last propをtrueに設定します。

ソート比較処理のカスタマイズについては、以下のカスタムソート比較ルーチンセクションを参照してください。

内部ソートとロケール処理

内部のソート比較ルーチンは、文字列化された列値の比較にString.prototype.localeCompare()を使用します(比較されている値が両方ともNumber型または両方ともDate型でない場合)。ブラウザネイティブのlocaleCompare()メソッドは、文字列のソート方法を制御するためのlocale文字列(またはロケール文字列の配列)とoptionsオブジェクトを受け入れます。デフォルトのオプションは{ numeric: true }で、ロケールはundefinedです(ブラウザのデフォルトロケールを使用します)。

sort-compare-locale propを介してロケール(またはロケール)を変更して、ソート用のロケールを設定したり、sort-compare-options propを介してソートオプションを渡したりすることができます。

sort-compare-locale プロップのデフォルト値は undefined であり、ブラウザ(または Node.js ランタイム)のデフォルトロケールが使用されます。sort-compare-locale プロップは、BCP 47 言語タグ文字列、またはそのようなタグの配列を受け入れることができます。ロケールの詳細については、MDN の ロケールの識別とネゴシエーションを参照してください。

sort-compare-options プロップは、次のプロパティを含むオブジェクトを受け入れます。

  • localeMatcher: 使用するロケールマッチングアルゴリズム。可能な値は 'lookup''best fit' です。デフォルトは 'best fit' です。このオプションの詳細については、MDN Intl ページを参照してください。
  • sensitivity: 文字列のどの違いが 0 以外の比較結果値につながるべきか。可能な値は次のとおりです。
    • 'base': 基本文字が異なる文字列のみが不等として比較されます。例: a ≠ b, a = á, a = A
    • 'accent': 基本文字またはアクセント記号やその他の発音区別符号が異なる文字列のみが不等として比較されます。例: a ≠ b, a ≠ á, a = A
    • 'case': 基本文字または大文字小文字が異なる文字列のみが不等として比較されます。例: a ≠ b, a = á, a ≠ A
    • 'variant': (デフォルト) 基本文字、アクセント記号やその他の発音区別符号、または大文字小文字が異なる文字列が不等として比較されます。他の違いも考慮される可能性があります。例: a ≠ b, a ≠ á, a ≠ A
  • ignorePunctuation: 句読点を無視するかどうか。可能な値は truefalse です。デフォルトは false です。
  • numeric: 数値照合を使用するかどうか。'1' < '2' < '10' のようになるべきです。可能な値は truefalse です。デフォルトは false です。実装(ブラウザ、ランタイム)はこのプロパティをサポートする必要はないため、無視される可能性があることに注意してください。
  • caseFirst: 大文字または小文字のどちらを先にソートするか。可能な値は 'upper''lower'、または 'false' (ロケールのデフォルトを使用)です。デフォルトは 'false' です。実装はこのプロパティをサポートする必要はありません。
  • 'usage': <b-table> によって常に 'sort' に設定されます

例 1: ドイツ語の単語をソートする場合は、sort-compare-locale="de" を設定します(ドイツ語では、äzにソートされます)。スウェーデン語の場合は sort-compare-locale="sv" を設定します(スウェーデン語では、äzにソートされます)。

例 2: 文字列である数値を数値的に比較し、大文字小文字とアクセント記号を無視するには

<b-table :sort-compare-options="{ numeric: true, sensitivity: 'base' }" ...>

カスタムソート比較ルーチン

sort-compare プロップに関数参照を渡すことで、独自のカスタムソート比較ルーチンを提供できます。sort-compare ルーチンには、7 つの引数が渡されます。最後の 4 つはオプションです。

  • 最初の 2 つの引数 (ab) は、比較対象の行のレコードオブジェクトです。
  • 3 番目の引数は、ソート対象のフィールド key (sortBy) です。
  • 4 番目の引数 (sortDesc) は、<b-table> がレコードを表示する順序です (降順の場合は true、昇順の場合は false)。
  • 5 番目の引数は、フィールドのformatter 関数への参照、または関数参照である場合はフィールドの filterByFormatted 値です。formatter が見つからない場合、この値は undefined になります。フォーマットされたフィールド値を取得するには、このメソッドを呼び出す必要があります。フォーマットされた値でソートする必要がある場合は、valA = formatter(a[key], key, a) および valB = formatter(b[key], key, b) とします。フィールドの sortByFormatted プロパティが true ではないか、formatter 関数参照ではないか、またはフィールドの formatter 関数が見つからない場合、これは undefined になります。
  • 6 番目の引数は、sort-compare-options プロップの値です (デフォルトは { numeric: true })。
  • 7 番目の引数は、sort-compare-locale プロップの値です (デフォルトは undefined)。

6 番目と 7 番目の引数は、String.prototype.localeCompare() メソッドを使用して文字列を比較する場合に使用できます。

ほとんどの一般的な状況では、最初の 3 つの引数のみを使用する必要があります。4 番目の引数(ソート方向)は、通常は使用しないでください。b-table が方向を処理するため、この値は通常、null および/または undefined 値をソートする方法を特別に処理する場合(つまり、null/undefined を最初または最後にソートする場合)にのみ必要です。

ルーチンは、a[key] < b[key] の場合は -1 (または負の値)、a[key] === b[key] の場合は 0a[key] > b[key] の場合は 1 (または正の値) のいずれかを返す必要があります。

カスタムソート比較ルーチンは、特定の key組み込みのソート比較ルーチンにフォールバックするために、null または false を返すこともできます。この機能(つまり、null を返すことによって)を使用すると、カスタムソート比較ルーチンで仮想 (スコープ付きスロット) 列などの特定のフィールド (キー) のみ を処理し、内部 (組み込み) ソート比較ですべての他のフィールドを処理できます。

デフォルトのソート比較ルーチンは、次のように機能します。4 番目の引数(ソート方向)は、ソート比較では使用されないことに注意してください。

function sortCompare(aRow, bRow, key, sortDesc, formatter, compareOptions, compareLocale) {
  const a = aRow[key] // or use Lodash `_.get()`
  const b = bRow[key]
  if (
    (typeof a === 'number' && typeof b === 'number') ||
    (a instanceof Date && b instanceof Date)
  ) {
    // If both compared fields are native numbers or both are native dates
    return a < b ? -1 : a > b ? 1 : 0
  } else {
    // Otherwise stringify the field data and use String.prototype.localeCompare
    return toString(a).localeCompare(toString(b), compareLocale, compareOptions)
  }
}

// Helper function to stringify the values of an Object
function toString(value) {
  if (value === null || typeof value === 'undefined') {
    return ''
  } else if (value instanceof Object) {
    return Object.keys(value)
      .sort()
      .map(key => toString(value[key]))
      .join(' ')
  } else {
    return String(value)
  }
}

ローカルソートの無効化

アプリでソートを完全に処理する場合は、no-local-sorting プロップを true に設定して、<b-table> のローカルソートを無効にすることができます。これにより、ソート可能なヘッダー機能 (sort-changed または context-changed イベント、および同期可能なプロップ経由) は維持されます。

同期可能なプロップ sort-by.sync および sort-desc.sync を使用して、ソート列と方向の変更を検出できます。

また、ソート可能な列ヘッダー(またはフッター)がクリックされると、sort-changed イベントが <b-table> のコンテキストオブジェクトを含む単一の引数とともに発行されます。sort-changed イベントとコンテキストオブジェクトの詳細については、以下のソート変更の検出セクションを参照してください。

no-local-sortingtrue の場合、sort-compare プロップは効果がありません。

初期ソート方向の変更

ソート可能な列ヘッダーがクリックされたときに、昇順と降順のソートが適用される順序を、sort-direction プロップを使用して制御します。デフォルト値の 'asc' は、(列が現在ソートされていない場合)最初に昇順ソートを適用します。動作を反転して最初に降順にソートするには、'desc' に設定します。

別のソート可能な列ヘッダーをクリックしたときに現在のソート方向を変更したくない場合は、sort-direction'last' に設定します。これにより、以前にソートされた列のソート方向が維持されます。

個々の列の初期ソート方向(列がソートされていない状態からソートされた状態に移行するときに適用される)の場合は、fields でプロパティ sortDirection を指定します。この機能の使用例については、以下の完全な例を参照してください。

フィルタリング

フィルタリングは、使用する場合、デフォルトで元の items 配列データに適用されます。b-table は、データのフィルタリング方法に関するいくつかのオプションを提供します。

スコープ付きフィールドスロットによる書式設定の結果に基づいてフィルタリングすることは、現在できません。

組み込みフィルタリング

アイテムの行データ値は文字列化され(文字列化がどのように行われるかについては、上記のソートセクションを参照してください)、フィルターはその文字列化されたデータ(アンダースコア '_' で始まる特別なプロパティを除く)を検索します。文字列化には、デフォルトで、表示されている列に表示されないデータも含まれます。

デフォルトの組み込みフィルター関数では、filter プロップ値は、文字列または RegExp オブジェクト(正規表現は、/g グローバルフラグをセットするべきではありません)のいずれかになります。

文字列化された行に、指定された文字列値が含まれているか、RegExp 式と一致する場合は、表示される結果に含まれます。

現在のフィルターをクリアするには、filter プロップを null または空の文字列に設定します。

組み込みのフィルタリングオプション

フィルタを適用するデータを制御するためのいくつかのオプションがあります。

  • filter-ignored-fields プロパティは、フィルタリング時に無視する必要があるトップレベル(行データの直接のプロパティ)のフィールドキーの配列を受け入れます。
  • filter-included-fields プロパティは、フィルタリング時に使用する必要があるトップレベル(行データの直接のプロパティ)のフィールドキーの配列を受け入れます。この配列に含まれていない他のすべてのフィールドキーは無視されます。この機能は、特定の列でフィルタリングしたい場合に便利です。指定された配列が空の場合、filter-ignored-fields プロパティで指定されたものを除き、すべてのフィールドが含まれます。フィールドキーが filter-ignored-fieldsfilter-included-fields の両方で指定されている場合、filter-included-fields が優先されます。
  • 通常、<b-table> は文字列化されたレコードデータに基づいてフィルタリングを行います。フィールドに formatter 関数が指定されている場合、フィールド定義プロパティ filterByFormattedtrue に設定することで、フォーマッタの結果に基づいてフィルタリングすることもできます。フィールドにフォーマッタ関数がない場合、このオプションは無視されます。フィルタリングのみに使用するフォーマッタ関数の参照を、フィールド定義プロパティ filterByFormatted に渡すこともできます。

filter-ignored-fields および filter-included-fields プロパティ、およびフィールド定義プロパティ filterByFormatted は、カスタムフィルタ関数、またはアイテムプロバイダーベースのフィルタリングを使用する場合は効果がありません。

カスタムフィルタ関数

プロパティ filter-function をカスタムフィルタテスト関数の参照に設定することで、カスタムフィルタ関数を使用することもできます。フィルタ関数には、2つの引数が渡されます。

  • 元のアイテム行レコードデータオブジェクト。この引数は読み取り専用として扱ってください。
  • filter プロパティの内容(文字列、RegExp、配列、またはオブジェクトのいずれかになります)

関数は、レコードが条件に一致する場合は true を返し、レコードをフィルタリングする場合は false を返す必要があります。

表示されるデータへの適切なリアクティブな更新のために、フィルタリングを行わない場合は、filter プロパティを null または空の文字列(空のオブジェクトや配列ではなく)に設定する必要があります。filter プロパティが偽の値の場合、フィルタ関数は呼び出されません。

empty-filter-text の表示は、filter プロパティの真偽値に依存します。

フィルタイベント

ローカルフィルタリングが適用され、結果としてアイテムの数が変化すると、<b-table> は2つの引数で filtered イベントを発行します。

  • フィルタルーチンを通過するアイテムの完全なリストである配列の参照。この引数は読み取り専用として扱ってください。
  • フィルタテストを通過したレコードの数(最初の引数の長さ)

filter プロパティを null または空の文字列に設定すると、ローカルアイテムのフィルタリングがクリアされます。

フィルタ条件の変更のデバウンス

v2.1.0 で非推奨 <b-form-input>debounce 機能を使用してください。

<b-table>filter プロパティに紐付けられたテキスト入力がある場合、フィルタリングプロセスはユーザーが入力した文字ごとに実行されます。アイテムデータセットが大きい場合、このプロセスに時間がかかり、テキスト入力が遅く見えることがあります。

この種の状況を緩和するために、<b-table>filter-debounce プロパティを介してデバウンスタイムアウト値(ミリ秒単位)を受け入れます。デフォルトは 0(ミリ秒)です。0 より大きい値が提供されると、フィルタはテーブル結果を更新する前にその時間だけ待機します。filter プロパティの値がこのタイムアウトの期限が切れる前に変化した場合、フィルタリングはデバウンスタイムアウトが期限切れになるまで再び遅延されます。

使用する場合、filter-debounce の推奨値は 100200 ミリ秒の範囲ですが、ユースケースによっては他の値がより適切な場合があります。

このプロパティの使用は、アイテムプロバイダー関数でプロバイダーフィルタリングを使用する場合に、バックエンドAPIへの呼び出し回数を減らすのに役立ちます。

フィルタリングに関する注意

filter 機能の使用例については、以下の完全な例を参照してください。

ページネーション

<b-table> は、アイテムデータの組み込みのページネーションをサポートしています。per-page プロパティを表示したい最大行数に設定し、current-page プロパティを使用して表示するページを指定(ページ 1 から開始)することで、一度に表示する行数を制御できます。current-page を計算されたページ数よりも大きい値に設定すると、行は表示されません。

ページネーションを制御するために、<b-pagination> コンポーネントを <b-table> と組み合わせて使用できます。

per-page0 (デフォルト)に設定すると、ローカルアイテムのページネーション機能が無効になります。

アイテムプロバイダー関数の使用

アイテムプロパティのセクションで説明したように、items プロパティを介して関数参照を指定することにより、関数を使用して行データ(アイテム)を提供することができます。

プロバイダー関数は、次のシグネチャで呼び出されます。

provider(ctx, [callback])

ctx はテーブル状態に関連付けられたコンテキストオブジェクトであり、次のプロパティが含まれています。

プロパティ 説明
currentPage 数値 現在のページ番号(1から始まり、current-page プロパティの値)
perPage 数値 表示するページあたりの最大行数(per-page プロパティの値)
filter 文字列またはRegExpまたはオブジェクト filter プロパティの値
sortBy 文字列 ソートされている現在の列キー。ソートされていない場合は空の文字列。
sortDesc ブール値 現在のソート方向(降順の場合は true、昇順の場合は false
apiUrl 文字列 api-url プロパティに提供された値。提供されていない場合は null

2番目の引数 callback は、コールバック非同期メソッドを使用する場合のオプションのパラメータです。

例:データの配列を返す(同期)

function myProvider() {
  let items = []

  // Perform any items processing needed

  // Must return an array
  return items || []
}

例:コールバックを使用してデータを返す(非同期)

function myProvider(ctx, callback) {
  const params = '?page=' + ctx.currentPage + '&size=' + ctx.perPage

  this.fetchData('/some/url' + params)
    .then(data => {
      // Pluck the array of items off our axios response
      const items = data.items
      // Provide the array of items to the callback
      callback(items)
    })
    .catch(() => {
      callback([])
    })

  // Must return null or undefined to signal b-table that callback is being used
  return null
}

例:Promiseを使用してデータを返す(非同期)

function myProvider(ctx) {
  const promise = axios.get('/some/url?page=' + ctx.currentPage + '&size=' + ctx.perPage)

  // Must return a promise that resolves to an array of items
  return promise.then(data => {
    // Pluck the array of items off our axios response
    const items = data.items
    // Must return an array of items or an empty array if an error occurred
    return items || []
  })
}

例:async関数を使用する(準同期)

アイテムの配列を返すためにasyncメソッドを使用できます

async function myProvider(ctx) {
  try {
    const response = await axios.get(`/some/url?page=${ctx.currentPage}&size=${ctx.perPage}`)
    return response.items
  } catch (error) {
    return []
  }
}

すべてのブラウザが async/await をネイティブにサポートしているわけではないことに注意してください。async メソッドをサポートしていないブラウザの場合、コードをトランスパイルする必要があります。

自動テーブルビジー状態

<b-table> は、アイテムプロバイダー関数が使用されている場合、自動的に busy 状態を追跡/制御しますが、busy プロパティも提供し、内部の busy 状態をオーバーライドするか、2方向の .sync 修飾子を使用してアプリケーション内の <b-pagination> の現在のビジー状態を監視するために使用できます。

注:<b-table>busy 状態を完全に追跡できるようにするには、カスタムアイテムプロバイダー関数がデータソースからのエラーを処理し、空の配列を <b-table> に返す必要があります。

例:ビジー状態の使用

<template>
  <div>
    <b-table
      id="my-table"
      :busy.sync="isBusy"
      :items="myProvider"
      :fields="fields"
      ...
    ></b-table>
  </div>
</template>

<script>
  export default {
    data () {
      return {
        isBusy: false
      }
    }
    methods: {
      myProvider () {
        // Here we don't set isBusy prop, so busy state will be
        // handled by table itself
        // this.isBusy = true
        let promise = axios.get('/some/url')

        return promise.then((data) => {
          const items = data.items
          // Here we could override the busy state, setting isBusy to false
          // this.isBusy = false
          return(items)
        }).catch(error => {
          // Here we could override the busy state, setting isBusy to false
          // this.isBusy = false
          // Returning an empty array, allows table to correctly handle
          // internal busy state in case of error
          return []
        })
      }
    }
  }
</script>

async/await プロバイダーを使用している場合

async function myProvider(ctx) {
  this.isBusy = true
  try {
    const response = await axios.get(`/some/url?page=${ctx.currentPage}&size=${ctx.perPage}`)
    this.isBusy = false
    return response.items
  } catch (error) {
    this.isBusy = false
    return []
  }
}

  • テーブルを手動で busy 状態にした場合、busy 状態が false に設定されるまで、アイテムプロバイダーは呼び出されたり、リフレッシュされたりしません。
  • すべてのクリック関連およびホバーイベント、およびソート変更イベントは、busy 状態(プロバイダーの更新中に自動的に設定されるか、手動で設定された場合)のときには発行されません。

プロバイダーのページング、フィルタリング、およびソート

デフォルトでは、アイテムプロバイダー関数は、データを表示するために b-table に渡す前に、データのすべてのページング、フィルタリング、およびソートを担当します。

次の b-table プロパティを true に設定することで、プロバイダーのページング、フィルタリング、およびソート(個別に)を無効にすることができます。

Prop デフォルト 説明
no-provider-paging ブール値 false true の場合、b-table ローカルデータページネーションの使用が有効になります
no-provider-sorting ブール値 false true の場合、b-table ローカルソートの使用が有効になります
no-provider-filtering ブール値 false true の場合、b-table ローカルフィルタリングの使用が有効になります

no-provider-pagingfalse (デフォルト)の場合、最大で perPage 個のレコードのみを返す必要があります。

  • <b-table> は、プロバイダー関数の呼び出しをトリガーするために、ページネーションおよびフィルタリングの値への参照を必要とします。したがって、プロバイダー更新関数呼び出しをトリガーするために、b-tableper-pagecurrent-page および filter プロパティにバインドするようにしてください(それぞれの no-provider-* プロパティが true に設定されていない限り)。
  • items がプロバイダー関数の場合、no-local-sorting プロパティは効果がありません。
  • プロバイダーフィルタリングを使用する場合、<b-form-input>debounce プロパティ100 ミリ秒より大きい値に設定すると、ユーザーが条件を入力するにつれて、バックエンドAPIへの呼び出し回数を最小限に抑えるのに役立つことがわかります。

テーブルデータの強制リフレッシュ

また、refresh::table イベントを $root 上で発生させることで、プロバイダー関数のリフレッシュをトリガーできます。この際、単一の引数として、b-tableid を渡します。この機能を利用するには、テーブルに一意の ID が設定されている必要があります。

this.$root.$emit('bv::refresh::table', 'my-table')

または、テーブル参照の refresh() メソッドを呼び出すことでも可能です。

<div>
  <b-table ref="table" ... ></b-table>
</div>
this.$refs.table.refresh()

注: テーブルが busy 状態の場合(つまり、プロバイダーの更新が現在実行中の場合)、リフレッシュは現在の更新が完了するまで待機します。現在リフレッシュが保留中で、新しいリフレッシュが要求された場合、リフレッシュは1回のみ実行されます。

ソート変更の検出

<b-table>sort-changed イベントをリッスンすることで、ソートキーと方向が変更されたタイミングを検出できます。

<div>
  <b-table @sort-changed="sortingChanged" ... ></b-table>
</div>

sort-changed イベントは、テーブルの現在の状態コンテキストオブジェクトの単一の引数を提供します。このコンテキストオブジェクトは、アイテムプロバイダー関数で使用されるものと同じ形式です。

export default {
  methods: {
    sortingChanged(ctx) {
      // ctx.sortBy   ==> Field key for sorting by (or null for no sorting)
      // ctx.sortDesc ==> true if sorting descending, false otherwise
    }
  }
}

また、:sort-by.sync および :sort-desc.sync の双方向プロパティをそれぞれ使用して、現在の sortBy および sortDesc の値を取得することもできます(詳細は、上記のソートセクションを参照してください)。

<div>
  <b-table :sort-by.sync="mySortBy" :sort-desc.sync="mySortDesc" ... ></b-table>
</div>

サーバーサイドレンダリング

サーバーサイドレンダリング(SSR)と items プロバイダー関数を使用する場合は、特別な注意が必要です。サーバー側でデータをフェッチする際に必要となる可能性のある特別な状況に対処してください!

<b-table> がドキュメントにマウントされると、プロバイダーの更新呼び出しが自動的にトリガーされます。

軽量テーブル

単に表形式のデータを表示したいだけであれば、<b-table-lite><b-table> の優れた代替手段となります。<b-table-lite> コンポーネントは、<b-table> のすべてのスタイリングおよびフォーマット機能(行の詳細やスタックサポートを含む)を提供しますが、以下の機能は除外されています。

  • フィルタリング
  • ソート
  • ページネーション
  • アイテムプロバイダーのサポート
  • 選択可能な行
  • テーブルのビジー状態とスタイリング
  • 固定された上部および下部の行
  • 空の行のサポート

プラグインとしての Table Lite

TablePlugin には <b-table-lite> が含まれています。便宜上、BootstrapVue は <b-table-lite> のみをインストールする TableLitePlugin も提供しています。TableLitePlugin は、トップレベルの名前付きエクスポートとして利用できます。

シンプルなテーブル

<b-table-simple> コンポーネントを使用すると、ユーザーはテーブルコンテンツのレンダリングを完全に制御でき、基本的な Bootstrap v4 のテーブルスタイリングが提供されます。<b-table-simple> は、<table> 要素をラップするコンポーネントです。コンポーネント内では、default スロットを介して、BootstrapVue の テーブルヘルパーコンポーネント<b-thead><b-tfoot><b-tbody><b-tr><b-th><b-td>、および HTML5 要素 <caption><colgroup><col> のいずれかまたはすべてを使用できます。コンポーネントの名前とは異なり、<b-table-simple> を使用すると、シンプルまたは複雑なテーブルレイアウトを作成できます。

<b-table-simple> は、stripedborderedborderlessoutlinedsmallhoverdarkfixedresponsive、および sticky-header というプロパティを通じて、基本的なスタイリングオプションを提供します。stacked モードも使用できますが、下記のシンプルなテーブルとスタックモードのセクションで説明されているように、セルの見出しを生成するために追加のマークアップが必要です。固定列もサポートされていますが、どの列を固定するかを指定するために、追加のマークアップが少し必要になります。固定列の使用に関する詳細は、下記を参照してください。

b-table-simple は単なるラッパーコンポーネントであり、内部にコンテンツをレンダリングする必要があるため、<b-table> の高度な機能(つまり、行イベント、ヘッドイベント、ソート、ページネーション、フィルタリング、フットクローン、アイテム、フィールドなど)は提供されません。

<div>
  <b-table-simple hover small caption-top responsive>
    <caption>Items sold in August, grouped by Country and City:</caption>
    <colgroup><col><col></colgroup>
    <colgroup><col><col><col></colgroup>
    <colgroup><col><col></colgroup>
    <b-thead head-variant="dark">
      <b-tr>
        <b-th colspan="2">Region</b-th>
        <b-th colspan="3">Clothes</b-th>
        <b-th colspan="2">Accessories</b-th>
      </b-tr>
      <b-tr>
        <b-th>Country</b-th>
        <b-th>City</b-th>
        <b-th>Trousers</b-th>
        <b-th>Skirts</b-th>
        <b-th>Dresses</b-th>
        <b-th>Bracelets</b-th>
        <b-th>Rings</b-th>
      </b-tr>
    </b-thead>
    <b-tbody>
      <b-tr>
        <b-th rowspan="3">Belgium</b-th>
        <b-th class="text-right">Antwerp</b-th>
        <b-td>56</b-td>
        <b-td>22</b-td>
        <b-td>43</b-td>
        <b-td variant="success">72</b-td>
        <b-td>23</b-td>
      </b-tr>
      <b-tr>
        <b-th class="text-right">Gent</b-th>
        <b-td>46</b-td>
        <b-td variant="warning">18</b-td>
        <b-td>50</b-td>
        <b-td>61</b-td>
        <b-td variant="danger">15</b-td>
      </b-tr>
      <b-tr>
        <b-th class="text-right">Brussels</b-th>
        <b-td>51</b-td>
        <b-td>27</b-td>
        <b-td>38</b-td>
        <b-td>69</b-td>
        <b-td>28</b-td>
      </b-tr>
      <b-tr>
        <b-th rowspan="2">The Netherlands</b-th>
        <b-th class="text-right">Amsterdam</b-th>
        <b-td variant="success">89</b-td>
        <b-td>34</b-td>
        <b-td>69</b-td>
        <b-td>85</b-td>
        <b-td>38</b-td>
      </b-tr>
      <b-tr>
        <b-th class="text-right">Utrecht</b-th>
        <b-td>80</b-td>
        <b-td variant="danger">12</b-td>
        <b-td>43</b-td>
        <b-td>36</b-td>
        <b-td variant="warning">19</b-td>
      </b-tr>
    </b-tbody>
    <b-tfoot>
      <b-tr>
        <b-td colspan="7" variant="secondary" class="text-right">
          Total Rows: <b>5</b>
        </b-td>
      </b-tr>
    </b-tfoot>
  </b-table-simple>
</div>

<!-- b-table-simple.vue -->

responsive または sticky-header モードの場合、<table> 要素は <div> 要素でラップされます。<table> 要素に追加のクラスを適用する必要がある場合は、table-class プロパティを使用してください。

<b-table-simple> に指定された追加の属性は、常に <table> 要素に適用されます。

シンプルなテーブルとスタックモード

テーブルがスタックモードの場合、<b-table-simple> のボディセルには追加のマークアップが必要です。具体的には、BootstrapVue はセルの見出しを作成するために特別なデータ属性を使用します。この属性は、<b-td> または <b-th>stacked-heading プロパティを通じて指定できます。プレーンな文字列のみがサポートされています(HTMLマークアップは不可)。これは、疑似要素 ::before と CSS の content プロパティを使用しているためです。

上記と同じテーブルを常にスタック表示になるように設定し、スタックモードを処理するための追加のマークアップ(特にセルの見出しを生成するためのもの)を追加した例を示します。

<div>
  <b-table-simple hover small caption-top stacked>
    <caption>Items sold in August, grouped by Country and City:</caption>
    <colgroup><col><col></colgroup>
    <colgroup><col><col><col></colgroup>
    <colgroup><col><col></colgroup>
    <b-thead head-variant="dark">
      <b-tr>
        <b-th colspan="2">Region</b-th>
        <b-th colspan="3">Clothes</b-th>
        <b-th colspan="2">Accessories</b-th>
      </b-tr>
      <b-tr>
        <b-th>Country</b-th>
        <b-th>City</b-th>
        <b-th>Trousers</b-th>
        <b-th>Skirts</b-th>
        <b-th>Dresses</b-th>
        <b-th>Bracelets</b-th>
        <b-th>Rings</b-th>
      </b-tr>
    </b-thead>
    <b-tbody>
      <b-tr>
        <b-th rowspan="3" class="text-center">Belgium (3 Cities)</b-th>
        <b-th stacked-heading="City" class="text-left">Antwerp</b-th>
        <b-td stacked-heading="Clothes: Trousers">56</b-td>
        <b-td stacked-heading="Clothes: Skirts">22</b-td>
        <b-td stacked-heading="Clothes: Dresses">43</b-td>
        <b-td stacked-heading="Accessories: Bracelets" variant="success">72</b-td>
        <b-td stacked-heading="Accessories: Rings">23</b-td>
      </b-tr>
      <b-tr>
        <b-th stacked-heading="City">Gent</b-th>
        <b-td stacked-heading="Clothes: Trousers">46</b-td>
        <b-td stacked-heading="Clothes: Skirts" variant="warning">18</b-td>
        <b-td stacked-heading="Clothes: Dresses">50</b-td>
        <b-td stacked-heading="Accessories: Bracelets">61</b-td>
        <b-td stacked-heading="Accessories: Rings" variant="danger">15</b-td>
      </b-tr>
      <b-tr>
        <b-th stacked-heading="City">Brussels</b-th>
        <b-td stacked-heading="Clothes: Trousers">51</b-td>
        <b-td stacked-heading="Clothes: Skirts">27</b-td>
        <b-td stacked-heading="Clothes: Dresses">38</b-td>
        <b-td stacked-heading="Accessories: Bracelets">69</b-td>
        <b-td stacked-heading="Accessories: Rings">28</b-td>
      </b-tr>
      <b-tr>
        <b-th rowspan="2" class="text-center">The Netherlands (2 Cities)</b-th>
        <b-th stacked-heading="City">Amsterdam</b-th>
        <b-td stacked-heading="Clothes: Trousers" variant="success">89</b-td>
        <b-td stacked-heading="Clothes: Skirts">34</b-td>
        <b-td stacked-heading="Clothes: Dresses">69</b-td>
        <b-td stacked-heading="Accessories: Bracelets">85</b-td>
        <b-td stacked-heading="Accessories: Rings">38</b-td>
      </b-tr>
      <b-tr>
        <b-th stacked-heading="City">Utrecht</b-th>
        <b-td stacked-heading="Clothes: Trousers">80</b-td>
        <b-td stacked-heading="Clothes: Skirts" variant="danger">12</b-td>
        <b-td stacked-heading="Clothes: Dresses">43</b-td>
        <b-td stacked-heading="Accessories: Bracelets">36</b-td>
        <b-td stacked-heading="Accessories: Rings" variant="warning">19</b-td>
      </b-tr>
    </b-tbody>
    <b-tfoot>
      <b-tr>
        <b-td colspan="7" variant="secondary" class="text-right">
          Total Rows: <b>5</b>
        </b-td>
      </b-tr>
    </b-tfoot>
  </b-table-simple>
</div>

<!-- b-table-simple-stacked.vue -->

<b-table> および <b-table-lite> と同様に、テーブルヘッダー(<thead>)とフッター(<tfoot>)は、テーブルが視覚的にスタックされている場合は視覚的に非表示になります。ヘッダーまたはフッターが必要な場合は、<b-tbody> コンポーネント内(または2番目の <b-tbody> コンポーネント内)に追加の <b-tr> を作成し、子 <b-th> セルに columnheader のロールを設定し、Bootstrap v4 のレスポンシブ表示ユーティリティクラスを使用して、テーブルが視覚的にスタックされなくなった特定のブレークポイントより上の追加の行(または <b-tbody>)を非表示にすることで実現できます(ブレークポイントは、設定したスタックテーブルのブレークポイントと一致する必要があります)。たとえば、<b-tr class="d-md-none"> は中規模以上の画面で行を非表示にし、<b-tbody class="d-md-none"> は中規模以上の画面で行グループを非表示にします。

注: <b-table-simple> でのスタックモードでは、BootstrapVue のテーブルヘルパーコンポーネントを使用する必要があります。通常の <tbody><tr><td>、および <th> 要素タグを使用しても、期待どおりに機能せず、必要なアクセシビリティ属性も自動的に適用されません。

シンプルなテーブルと固定列

固定列は <b-table-simple> でサポートされていますが、固定する列の各テーブルセル(theadtbody、および tfoot 行グループ内)に sticky-column プロパティを設定する必要があります。たとえば、

<b-table-simple responsive>
  <b-thead>
    <b-tr>
      <b-th sticky-column>Sticky Column Header</b-th>
      <b-th>Heading 1</b-th>
      <b-th>Heading 2</b-th>
      <b-th>Heading 3</b-th>
      <b-th>Heading 4</b-th>
    </b-tr>
  </b-thead>
  <b-tbody>
    <b-tr>
      <b-th sticky-column>Sticky Column Row Header</b-th>
      <b-td>Cell</b-td>
      <b-td>Cell</b-td>
      <b-td>Cell</b-td>
      <b-td>Cell</b-td>
    </b-tr>
    <b-tr>
      <b-th sticky-column>Sticky Column Row Header</b-th>
      <b-td>Cell</b-td>
      <b-td>Cell</b-td>
      <b-td>Cell</b-td>
      <b-td>Cell</b-td>
    </b-tr>
  </b-tbody>
  <b-tfoot>
    <b-tr>
      <b-th sticky-column>Sticky Column Footer</b-th>
      <b-th>Heading 1</b-th>
      <b-th>Heading 2</b-th>
      <b-th>Heading 3</b-th>
      <b-th>Heading 4</b-th>
    </b-tr>
  </b-tfoot>
</b-table-simple>

<b-table> および <b-table-lite> と同様に、<b-table-simple>stacked プロパティが設定されている場合、固定列はサポートされません。

プラグインとしての Table Simple

TablePlugin には、<b-table-simple> とすべてのヘルパーコンポーネントが含まれています。便宜上、BootstrapVue は <b-table-simple> とすべてのヘルパーコンポーネントをインストールする TableSimplePlugin も提供しています。TableSimplePlugin は、トップレベルの名前付きエクスポートとして利用できます。

テーブルヘルパーコンポーネント

BootstrapVue は、<b-table-simple> を使用する場合、または名前付きスロット top-rowbottom-rowthead-top、および custom-foot(すべてテーブルの子要素を受け入れる)を使用する場合に、追加のヘルパー子コンポーネントを提供します。ヘルパーコンポーネントは以下のとおりです。

  • b-tbody (<b-table-simple> のみ)
  • b-thead (<b-table-simple> のみ)
  • b-tfoot (<b-table-simple> のみ)
  • b-tr
  • b-td
  • b-th

これらのコンポーネントは、バリアントを適切なクラスに変換する処理(テーブルのdarkモードの処理など)や、特定のアクセシビリティ属性(例:rolescope)を自動的に適用する処理を最適化するように設計されています。また、スタックテーブル、スティッキーヘッダー、およびカラムのマークアップを生成することもできます。コンポーネント<b-table>および<b-table-lite>は、内部でこれらのヘルパーコンポーネントを使用します。

シンプルなテーブルの例では、ヘルパーコンポーネント<b-thead><b-tbody><b-tr><b-th><b-td>、および<b-tfoot>を使用しています。<b-table-simple>内で通常のテーブルの子要素(例:<tbody><tr><td>など)と、名前付きスロットtop-rowbottom-row、およびthead-topを使用することもできますが、これらのBootstrapVueテーブル<b-t*>ヘルパーコンポーネントを使用することをお勧めします。<caption><colgroup>、または<col>用のヘルパーコンポーネントはないため、これらの3つのHTML5要素は<b-table-simple>内で直接使用できます。

  • テーブルヘルパーコンポーネント<b-tr><b-td>、および<b-th>はすべて、variantプロパティを受け入れます。このプロパティは、Bootstrapのテーマカラーのいずれかを適用し(カスタムテーマカラーはテーマを介してサポートされます)、テーブルのdarkモードに基づいて正しいバリアントクラスを使用するように自動的に調整します。
  • ヘルパーコンポーネント<b-thead><b-tfoot>は、それぞれhead-variantfoot-variantプロパティを受け入れます。サポートされている値は、'dark''light'、またはnullです(nullはデフォルトのテーブル背景を使用します)。これらのバリアントは、テキストカラーも制御します('dark'バリアントの場合は明るいテキスト、'light'バリアントの場合は暗いテキスト)。
  • アクセシビリティ属性rolescopeは、<b-th>および<b-td>コンポーネントに対して、それらの場所(thead、tbody、またはtfoot)とrowspanまたはcolspanプロパティに基づいて自動的に設定されます。ヘルパーコンポーネントに適切な属性を設定することで、自動scopeおよびroleの値をオーバーライドできます。
  • <b-tbody><b-thead>、および<b-tfoot>ヘルパーコンポーネントの場合、role属性を指定してオーバーライドしない限り、適切なデフォルトのroleである'rowgroup'が適用されます。
  • <b-tr>ヘルパーコンポーネントの場合、role属性を指定してオーバーライドしない限り、適切なデフォルトのroleである'row'が適用されます。<b-tr>scopeを追加しません。
  • <b-tbody>要素は、tbody-transition-propstbody-transition-handlersプロパティのいずれかまたは両方が使用されている場合、Vueの<transition-group>のレンダリングをサポートします。詳細については、テーブル本体のトランジションサポートセクションを参照してください。

アクセシビリティ

<b-table>および<b-table-lite>コンポーネントは、特定の機能を使用する場合、可能な限り最適なアクセシビリティマークアップを提供するよう試みます。

ヘルパーテーブルコンポーネントとともに<b-table-simple>を使用する場合、要素には適切なロールがデフォルトで適用されます。必要に応じて、これをオーバーライドできます。<b-table-simple>ヘルパーコンポーネントでクリックハンドラーを使用する場合、適切なaria-*属性を適用し、tabindex="0"を設定して、クリックアクションがスクリーンリーダーやキーボードのみのユーザーでもアクセスできるようにする必要があります。また、@keydown.enter.preventをリッスンして、Enterを押してセルまたは行のクリックをトリガーするユーザーを処理する必要があります(キーボードのみのユーザーのアクセシビリティに必要)。

ヘッダーのアクセシビリティ

列(フィールド)がソート可能である場合(<b-table>のみ)、またはhead-clickedリスナーが登録されている場合(<b-table><b-table-lite>)、ヘッダー(およびフッター)の<th>セルは、キーボードのみのユーザーやスクリーンリーダーユーザーがアクセスできるように、ドキュメントのタブ順序に配置されます(tabindex="0"を介して)。これにより、ユーザーはヘッダーセルでEnterを押してクリックをトリガーできます。

データ行のアクセシビリティ

テーブルがselectableモードである場合(<b-table>のみ、およびプロパティno-select-on-clickが設定されていない場合)、またはrow-clickedイベントリスナーが登録されている場合(<b-table><b-table-lite>)、すべてのデータアイテム行(<tr>要素)は、キーボードのみのユーザーやスクリーンリーダーユーザーがEnterまたはSpaceを押して行をクリックできるように、ドキュメントのタブ順序に配置されます(tabindex="0"を介して)。

テーブルアイテムの行がドキュメントのタブ順序に配置されている場合(<b-table><b-table-lite>)、フォーカスされたときに基本的なキーボードナビゲーションもサポートします。

  • Downで次の行に移動します
  • Upで前の行に移動します
  • EndまたはDown+Shiftで最後の行に移動します
  • HomeまたはUp+Shiftで最初の行に移動します
  • EnterまたはSpaceで行をクリックします。

行イベントのアクセシビリティ

次の行ベースのイベント/アクション(<b-table><b-table-lite>で使用可能)はアクセシブルとは見なされず、機能が重要でない場合や他の手段で提供できる場合にのみ使用する必要があります。

  • row-dblclicked
  • row-contextmenu
  • row-hovered
  • row-unhovered
  • row-middle-clicked

row-middle-clickedイベントはすべてのブラウザ(例:IE、Safari、およびほとんどのモバイルブラウザ)でサポートされていないことに注意してください。入力やナビゲーションをサポートしていない要素で発生するrow-middle-clickedイベントをリッスンする場合、通常はマウスの中ボタンのダウンアクションにマップされた他のデフォルトアクションを明示的に防止する必要があります。Windowsでは通常これは自動スクロールであり、macOSとLinuxでは通常これはクリップボードへの貼り付けです。これは、mousedownまたはpointerdownイベントのデフォルトの動作を防止することで実行できます。

さらに、右クリック後にデフォルトのシステムまたはブラウザのコンテキストメニューを開くのを避ける必要がある場合があります。オペレーティングシステム間のタイミングの違いにより、これもrow-middle-clickedの防止可能なデフォルトの動作ではありません。代わりに、これはrow-contextmenuイベントのデフォルトの動作を防止することで実行できます。

イベントに関するさまざまな不整合をアプリが処理できるように、可能な限り多くのブラウザとデバイスのバリアントでアプリをテストすることをお勧めします。

完全な例

<template>
  <b-container fluid>
    <!-- User Interface controls -->
    <b-row>
      <b-col lg="6" class="my-1">
        <b-form-group
          label="Sort"
          label-for="sort-by-select"
          label-cols-sm="3"
          label-align-sm="right"
          label-size="sm"
          class="mb-0"
          v-slot="{ ariaDescribedby }"
        >
          <b-input-group size="sm">
            <b-form-select
              id="sort-by-select"
              v-model="sortBy"
              :options="sortOptions"
              :aria-describedby="ariaDescribedby"
              class="w-75"
            >
              <template #first>
                <option value="">-- none --</option>
              </template>
            </b-form-select>

            <b-form-select
              v-model="sortDesc"
              :disabled="!sortBy"
              :aria-describedby="ariaDescribedby"
              size="sm"
              class="w-25"
            >
              <option :value="false">Asc</option>
              <option :value="true">Desc</option>
            </b-form-select>
          </b-input-group>
        </b-form-group>
      </b-col>

      <b-col lg="6" class="my-1">
        <b-form-group
          label="Initial sort"
          label-for="initial-sort-select"
          label-cols-sm="3"
          label-align-sm="right"
          label-size="sm"
          class="mb-0"
        >
          <b-form-select
            id="initial-sort-select"
            v-model="sortDirection"
            :options="['asc', 'desc', 'last']"
            size="sm"
          ></b-form-select>
        </b-form-group>
      </b-col>

      <b-col lg="6" class="my-1">
        <b-form-group
          label="Filter"
          label-for="filter-input"
          label-cols-sm="3"
          label-align-sm="right"
          label-size="sm"
          class="mb-0"
        >
          <b-input-group size="sm">
            <b-form-input
              id="filter-input"
              v-model="filter"
              type="search"
              placeholder="Type to Search"
            ></b-form-input>

            <b-input-group-append>
              <b-button :disabled="!filter" @click="filter = ''">Clear</b-button>
            </b-input-group-append>
          </b-input-group>
        </b-form-group>
      </b-col>

      <b-col lg="6" class="my-1">
        <b-form-group
          v-model="sortDirection"
          label="Filter On"
          description="Leave all unchecked to filter on all data"
          label-cols-sm="3"
          label-align-sm="right"
          label-size="sm"
          class="mb-0"
          v-slot="{ ariaDescribedby }"
        >
          <b-form-checkbox-group
            v-model="filterOn"
            :aria-describedby="ariaDescribedby"
            class="mt-1"
          >
            <b-form-checkbox value="name">Name</b-form-checkbox>
            <b-form-checkbox value="age">Age</b-form-checkbox>
            <b-form-checkbox value="isActive">Active</b-form-checkbox>
          </b-form-checkbox-group>
        </b-form-group>
      </b-col>

      <b-col sm="5" md="6" class="my-1">
        <b-form-group
          label="Per page"
          label-for="per-page-select"
          label-cols-sm="6"
          label-cols-md="4"
          label-cols-lg="3"
          label-align-sm="right"
          label-size="sm"
          class="mb-0"
        >
          <b-form-select
            id="per-page-select"
            v-model="perPage"
            :options="pageOptions"
            size="sm"
          ></b-form-select>
        </b-form-group>
      </b-col>

      <b-col sm="7" md="6" class="my-1">
        <b-pagination
          v-model="currentPage"
          :total-rows="totalRows"
          :per-page="perPage"
          align="fill"
          size="sm"
          class="my-0"
        ></b-pagination>
      </b-col>
    </b-row>

    <!-- Main table element -->
    <b-table
      :items="items"
      :fields="fields"
      :current-page="currentPage"
      :per-page="perPage"
      :filter="filter"
      :filter-included-fields="filterOn"
      :sort-by.sync="sortBy"
      :sort-desc.sync="sortDesc"
      :sort-direction="sortDirection"
      stacked="md"
      show-empty
      small
      @filtered="onFiltered"
    >
      <template #cell(name)="row">
        {{ row.value.first }} {{ row.value.last }}
      </template>

      <template #cell(actions)="row">
        <b-button size="sm" @click="info(row.item, row.index, $event.target)" class="mr-1">
          Info modal
        </b-button>
        <b-button size="sm" @click="row.toggleDetails">
          {{ row.detailsShowing ? 'Hide' : 'Show' }} Details
        </b-button>
      </template>

      <template #row-details="row">
        <b-card>
          <ul>
            <li v-for="(value, key) in row.item" :key="key">{{ key }}: {{ value }}</li>
          </ul>
        </b-card>
      </template>
    </b-table>

    <!-- Info modal -->
    <b-modal :id="infoModal.id" :title="infoModal.title" ok-only @hide="resetInfoModal">
      <pre>{{ infoModal.content }}</pre>
    </b-modal>
  </b-container>
</template>

<script>
  export default {
    data() {
      return {
        items: [
          { isActive: true, age: 40, name: { first: 'Dickerson', last: 'Macdonald' } },
          { isActive: false, age: 21, name: { first: 'Larsen', last: 'Shaw' } },
          {
            isActive: false,
            age: 9,
            name: { first: 'Mini', last: 'Navarro' },
            _rowVariant: 'success'
          },
          { isActive: false, age: 89, name: { first: 'Geneva', last: 'Wilson' } },
          { isActive: true, age: 38, name: { first: 'Jami', last: 'Carney' } },
          { isActive: false, age: 27, name: { first: 'Essie', last: 'Dunlap' } },
          { isActive: true, age: 40, name: { first: 'Thor', last: 'Macdonald' } },
          {
            isActive: true,
            age: 87,
            name: { first: 'Larsen', last: 'Shaw' },
            _cellVariants: { age: 'danger', isActive: 'warning' }
          },
          { isActive: false, age: 26, name: { first: 'Mitzi', last: 'Navarro' } },
          { isActive: false, age: 22, name: { first: 'Genevieve', last: 'Wilson' } },
          { isActive: true, age: 38, name: { first: 'John', last: 'Carney' } },
          { isActive: false, age: 29, name: { first: 'Dick', last: 'Dunlap' } }
        ],
        fields: [
          { key: 'name', label: 'Person full name', sortable: true, sortDirection: 'desc' },
          { key: 'age', label: 'Person age', sortable: true, class: 'text-center' },
          {
            key: 'isActive',
            label: 'Is Active',
            formatter: (value, key, item) => {
              return value ? 'Yes' : 'No'
            },
            sortable: true,
            sortByFormatted: true,
            filterByFormatted: true
          },
          { key: 'actions', label: 'Actions' }
        ],
        totalRows: 1,
        currentPage: 1,
        perPage: 5,
        pageOptions: [5, 10, 15, { value: 100, text: "Show a lot" }],
        sortBy: '',
        sortDesc: false,
        sortDirection: 'asc',
        filter: null,
        filterOn: [],
        infoModal: {
          id: 'info-modal',
          title: '',
          content: ''
        }
      }
    },
    computed: {
      sortOptions() {
        // Create an options list from our fields
        return this.fields
          .filter(f => f.sortable)
          .map(f => {
            return { text: f.label, value: f.key }
          })
      }
    },
    mounted() {
      // Set the initial number of items
      this.totalRows = this.items.length
    },
    methods: {
      info(item, index, button) {
        this.infoModal.title = `Row index: ${index}`
        this.infoModal.content = JSON.stringify(item, null, 2)
        this.$root.$emit('bv::show::modal', this.infoModal.id, button)
      },
      resetInfoModal() {
        this.infoModal.title = ''
        this.infoModal.content = ''
      },
      onFiltered(filteredItems) {
        // Trigger pagination to update the number of buttons/pages due to filtering
        this.totalRows = filteredItems.length
        this.currentPage = 1
      }
    }
  }
</script>

<!-- b-table-complete.vue -->

コンポーネントリファレンス

<b-table>

プロパティ

すべてのプロパティのデフォルト値はグローバルに設定可能です。

プロパティ
(クリックして昇順にソート)
(クリックして昇順にソート)
デフォルト
説明
api-url
文字列プロパティを渡します。アイテムプロバイダー関数に送信されるコンテキストオブジェクトの一部として渡されます
bordered
ブール値falseすべてのセルとヘッダーに罫線を追加します
borderless
ブール値falseセルからすべての罫線を削除します
busy
ブール値false設定すると、テーブルは強制的にビジー状態になります。アイテムプロバイダー関数が呼び出されているときに自動的に設定されます
caption
文字列キャプション要素に配置するテキスト文字列
caption-html
注意して使用してください
文字列キャプション要素に配置するHTML文字列
caption-top
ブール値falseテーブルのキャプションをテーブルの上に視覚的に配置します。デフォルトは下
current-page
NumberまたはString1テーブルがページ分割されている場合に表示する現在のページ番号。1から始まる
dark
ブール値falseテーブルをダークモードにします
details-td-class
v2.1.0+
ArrayまたはObjectまたはString行詳細スロットの行詳細の`td`要素に適用するCSSクラス(またはクラス)
empty-filtered-html
注意して使用してください
文字列フィルタリングによりテーブルに表示するアイテムがない場合に表示するHTML文字列
empty-filtered-text
文字列'リクエストに一致するレコードはありません'フィルタリングによりテーブルに表示するアイテムがない場合に表示するテキスト文字列
empty-html
注意して使用してください
文字列テーブルに表示するアイテムがない場合に表示するHTML文字列
empty-text
文字列'表示するレコードはありません'テーブルに表示するアイテムがない場合に表示するテキスト文字列
fields
配列fieldsフィールド名の配列またはフィールド定義オブジェクトの配列
filter
ArrayまたはObjectまたはStringまたはRegExpフィルタリングの基準。内部フィルタリングは、文字列またはRegExpの基準のみをサポートします
filter-debounce
v2.0.0+
NumberまたはString0レコードをフィルタリングする前に、フィルタ条件の変更をデバウンスする時間(ミリ秒単位)
filter-function
関数内部フィルタリング関数の代わりに使う関数の参照。詳細はドキュメントを参照
filter-ignored-fields
配列[]アイテムデータをフィルタリングする際に無視するトップレベルのフィールドの配列
filter-included-fields
配列[]フィルタリング時に含めるフィールドの配列。filter-ignore-fields を上書きする
fixed
ブール値falseすべての列を同じ幅にする(固定レイアウトテーブル)。大きなテーブルのレンダリングを高速化する。列の幅はCSSまたはcolgroupで設定可能
foot-clone
ブール値falseテーブルのフッターを有効にし、デフォルトでヘッダーコンテンツを複製する
foot-row-variant
v2.1.0+
文字列tfoot内のtr要素にBootstrapのテーマカラーバリアントを適用。head-row-variantにフォールバックする
foot-variant
文字列フッターのバリアント: 'light' または 'dark'、または未設定。foot-row-variantよりも優先される場合がある
head-row-variant
v2.1.0+
文字列thead内のtr要素にBootstrapのテーマカラーバリアントを適用
head-variant
文字列ヘッダーのバリアント: 'light' または 'dark'、または未設定。head-row-variantよりも優先される場合がある
hover
ブール値false行にホバースタイルを有効にする
id
文字列レンダリングされたコンテンツに `id` 属性を設定するために使用され、必要に応じて追加の要素IDを生成するためのベースとして使用される
items
Array または Function[]表示するアイテムの配列、またはアイテムプロバイダー関数の参照。詳細はドキュメントを参照
label-sort-asc
文字列'クリックで昇順にソート'セルをクリックするとソート方向が昇順に変わる場合に、ヘッダーセルに配置する非表示の文字列
label-sort-clear
文字列'クリックでソートをクリア'セルをクリックすると現在のソート方向がクリアされる場合に、ヘッダーセルに配置する非表示の文字列
label-sort-desc
文字列'クリックで降順にソート'セルをクリックするとソート方向が降順に変わる場合に、ヘッダーセルに配置する非表示の文字列
no-border-collapse
v2.0.0+
ブール値falseテーブルの境界線の折りたたみを無効にする。テーブルにスティッキーヘッダーまたは列がある場合に便利
no-footer-sorting
ブール値false組み込みのフォーマッタを使用する場合、このプロパティを設定すると、フッターでのソート機能が無効になる
no-local-sorting
ブール値false内部ソートルーチンを無効にし、ソート済みのアイテムをユーザーが提供することを期待する。ソートコントロールは引き続き利用可能
no-provider-filtering
ブール値false設定すると、内部フィルタリングを使用してデータをページネーションする。それ以外の場合、プロバイダーがフィルタリングを実行することが期待される
no-provider-paging
ブール値false設定すると、内部ページングを使用してデータをページネーションする。それ以外の場合、アイテムプロバイダーがページングを実行することが期待される
no-provider-sorting
ブール値false設定すると、内部ソートを使用してデータをソートする。それ以外の場合、アイテムプロバイダーがソートを実行することが期待される
no-select-on-click
v2.1.0+
ブール値falseクリックイベントによる行の選択を無効にする。行の選択はプログラムでのみ可能になる
no-sort-reset
ブール値falseテーブルがソート可能な場合、ソート不可能な列見出しをクリックすると、現在のソート値がクリアされる。この機能を無効にするには、このプロパティを設定する
outlined
ブール値falseテーブル要素にアウトライン境界線を追加する
per-page
NumberまたはString01ページあたりに表示する行数。ページネーションを無効にするには0に設定する
primary-key
文字列行ごとに一意の値が保証されているテーブルフィールドの名前。tbodyのトランジションサポートに必要であり、テーブルのレンダリングも高速化する
responsive
Boolean または Stringfalseテーブルの幅をレスポンシブにし、水平スクロールバーを追加する。常にレスポンシブにする場合は true に設定するか、レスポンシブから通常に切り替えるためのブレークポイント('sm'、'md'、'lg'、'xl')のいずれかに設定する
select-mode
文字列'multi''selectable' が設定されている場合のテーブルの選択モード。可能な値: 'single'、'multi'、または 'range'
selectable
ブール値false設定すると、テーブル本体の行が選択可能モードになる
selected-variant
文字列'active'選択した行に設定するBootstrapの色テーマバリアント。標準のBootstrapテーマカラーバリアント、または特別なテーブル行バリアント 'active'(デフォルト)を使用する。バリアントを使用しない場合は空の文字列に設定する
show-empty
ブール値false有効にすると、表示するアイテムレコードがない場合に、表示する行がないというメッセージが表示される
small
ブール値falseテーブルを小さなセルパディングでレンダリングする
sort-by
文字列現在ソートされているフィールド名。ソートをクリアするには null に設定する。.syncプロパティ修飾子で同期可能
sort-compare
関数データの2行をソート比較するための関数の参照。デフォルトは内部ソート比較ルーチン。詳細はドキュメントを参照
sort-compare-locale
Array または Stringソート時に言語を指定するロケール文字列(またはロケール文字列の配列)。詳細はドキュメントを参照
sort-compare-options
オブジェクト{ 'numeric': true }'String.prototype.sortLocale'メソッドのソート設定を含むオブジェクト。詳細はドキュメントを参照
sort-desc
ブール値false列を降順にソートする場合は true に設定する。.syncプロパティ修飾子で同期可能
sort-direction
文字列'asc'ソートされていない列をソートする初期ソート方向: 'asc'、'desc'、または 'last'(前のソート方向を使用する場合)
sort-icon-left
ブール値falseソートコントロールをヘッダーテキストの左側に配置する。デフォルトではヘッダーテキストの右側にある
sort-null-last
ブール値falseソート時、null値とundefined値は最初に(または 'sort-desc' によって最後に)ソートされる。null値を最後にソートするには、このプロパティを設定する。内部ソートにのみ適用可能
stacked
Boolean または Stringfalseテーブルをスタックモードにする。常にスタックにする場合は true に設定するか、スタックから通常に切り替えるためのブレークポイント('sm'、'md'、'lg'、'xl')のいずれかに設定する
sticky-header
Boolean または Stringfalseテーブルヘッダーをスティッキーにする。高さが最大300pxのテーブルには true に設定するか、任意の有効なCSS高さ(単位を含む)を設定する
striped
ブール値falsetbody行にストライプを適用する
table-class
ArrayまたはObjectまたはStringテーブル要素に適用するCSSクラス(またはクラス)
table-variant
文字列テーブル全体にBootstrapのテーマカラーバリアントを適用する
tbody-class
ArrayまたはObjectまたはStringtbody要素に適用するCSSクラス(またはクラス)
tbody-tr-attr
v2.2.0+
Object または Functiontbody内の各trに追加される属性、またはそのような属性を返す関数(詳細はドキュメントを参照)
tbody-tr-class
Array または Object または String または Functiontbody内のtr要素に適用するCSSクラス(またはクラス)。クラスを返す関数にすることも可能(詳細はドキュメントを参照)
tbody-transition-handlers
オブジェクトVueの 'transition-group' イベントハンドラー。提供すると、tbodyはVueの 'transition-group' コンポーネントになる
tbody-transition-props
オブジェクトVueの 'transition-group' プロパティ。提供すると、tbodyはVueの 'transition-group' コンポーネントになる
tfoot-class
ArrayまたはObjectまたはStringtfoot要素に適用するCSSクラス(またはクラス)
tfoot-tr-class
ArrayまたはObjectまたはStringtfoot内のtr要素に適用するCSSクラス(またはクラス)
thead-class
ArrayまたはObjectまたはStringthead要素に適用するCSSクラス(またはクラス)
thead-tr-class
ArrayまたはObjectまたはStringthead内のtr要素に適用するCSSクラス(またはクラス)
value
v-model
配列[]現在表示されている行データ。読み取り専用。このプロパティに値を設定しないでください

注意: HTML文字列 (*-html) をサポートするプロパティは、生のユーザー提供の値が渡された場合に、クロスサイトスクリプティング (XSS) 攻撃 に対して脆弱になる可能性があります。最初にユーザー入力を適切にサニタイズする必要があります!

v-model

プロパティ
イベント
valueinput

スロット

名前
(クリックして昇順にソート)
スコープ付き
説明
bottom-row ユーザー提供のB-TDセル用の固定された一番下の行スロット。オプションでスコープ付き
cell() フィールドデータのカスタムレンダリング用のデフォルトスコープ付きスロット。スコープ付きデータの詳細はドキュメントを参照
cell({key}) フィールドデータのカスタムレンダリング用のスコープ付きスロット。'{key}'はフィールドのキー名。スコープ付きデータの詳細はドキュメントを参照
custom-foot ユーザー提供のB-TR、B-TH、B-TD用のカスタムフッターコンテンツスロット。オプションでスコープ付き
empty `items` 配列にアイテムがない場合に表示するコンテンツ。オプションでスコープ付き
emptyfiltered フィルタリングされた `items` 配列にアイテムがない場合に表示するコンテンツ。オプションでスコープ付き
foot() フィールドフッターのカスタムレンダリング用のデフォルトスコープ付きスロット。スコープ付きフッターの詳細はドキュメントを参照
foot({key}) フィールドフッターのカスタムレンダリング用のスコープ付きスロット。'{key}'はフィールドのキー名。スコープ付きフッターの詳細はドキュメントを参照
head() フィールドヘッダーのカスタムレンダリング用のデフォルトスコープ付きスロット。スコープ付きヘッダーの詳細はドキュメントを参照
head({key}) フィールドヘッダーのカスタムレンダリング用のスコープ付きスロット。'{key}'はフィールドのキー名。スコープ付きヘッダーの詳細はドキュメントを参照
row-details オプションの追加レコード詳細をレンダリングするためのスコープ付きスロット。行詳細サポートの詳細はドキュメントを参照
table-busy Noテーブルがビジー状態のときに読み込みメッセージを配置するオプションのスロット
table-caption Noテーブルのキャプション要素に表示するコンテンツ
table-colgroup カスタムcolgroupおよびcol要素を配置するスロット。オプションでスコープ付き
thead-top ユーザー提供のB-TRとB-TH/B-TDのための`thead`要素内の列ヘッダーの上のスロット。オプションでスコープ付き
top-row ユーザー提供のB-TDセル用の固定された一番上の行スロット。オプションでスコープ付き

イベント

イベント
(クリックして昇順にソート)
引数
説明
context-changed
  1. ctx - テーブルの状態コンテキストオブジェクト。詳細はドキュメントを参照
テーブルの状態コンテキストが変更されるたびに発生
filtered
  1. filteredItems - フィルタリング後のアイテムの配列(ローカルページネーション適用前)
ローカルフィルタリングによってアイテム数が変化したときに発生します
head-clicked
  1. key - クリックされた列のキー(フィールド名)
  2. field - フィールド定義オブジェクト
  3. event - ネイティブイベントオブジェクト
  4. isFooter - このイベントがフッターセルでのクリックに起因する場合は「True」
ヘッダーまたはフッターセルがクリックされたときに発生します。「custom-foot」スロットには適用されません
refreshed アイテムプロバイダー関数がデータを返したときに発生します
row-clicked
  1. item - クリックされた行のアイテムデータ
  2. index - クリックされた行のインデックス
  3. event - ネイティブイベントオブジェクト
行がクリックされたときに発生します
row-contextmenu
  1. item - 右クリックされた行のアイテムデータ
  2. index - 右クリックされた行のインデックス
  3. event - ネイティブイベントオブジェクト
行が右クリックされたときに発生します
row-dblclicked
  1. item - ダブルクリックされた行のアイテムデータ
  2. index - ダブルクリックされた行のインデックス
  3. event - ネイティブイベントオブジェクト
行がダブルクリックされたときに発生します
row-hovered
  1. item - ホバーされた行のアイテムデータ
  2. index - ホバーされた行のインデックス
  3. event - ネイティブイベントオブジェクト
行がホバーされたときに発生します
row-middle-clicked
  1. item - ミドルクリックされた行のアイテムデータ
  2. index - ミドルクリックされた行のインデックス
  3. event - ネイティブイベントオブジェクト
行がミドルクリックされたときに発生します
row-selected
  1. rows - 選択されている行アイテムの配列
行が選択または選択解除されたときに発生します
row-unhovered
  1. item - ホバー解除された行のアイテムデータ
  2. index - ホバー解除された行のインデックス
  3. event - ネイティブイベントオブジェクト
行のホバーが解除されたときに発生します
sort-changed
  1. ctx - テーブルの状態コンテキストオブジェクト。詳細はドキュメントを参照
テーブルのソートが変更されたときに発生します

$root イベントリスナー

$rootで次のイベントを発行することで、<b-table>を制御できます

イベント
引数
説明
bv::refresh::table

id - データ更新のためのテーブルID

$rootでこのイベントが発生したときに、特定のテーブルのデータを更新します

<b-table-lite>

プロパティ

すべてのプロパティのデフォルト値はグローバルに設定可能です。

プロパティ
(クリックして昇順にソート)
(クリックして昇順にソート)
デフォルト
説明
bordered
ブール値falseすべてのセルとヘッダーに罫線を追加します
borderless
ブール値falseセルからすべての罫線を削除します
caption
文字列キャプション要素に配置するテキスト文字列
caption-html
注意して使用してください
文字列キャプション要素に配置するHTML文字列
caption-top
ブール値falseテーブルのキャプションをテーブルの上に視覚的に配置します。デフォルトは下
dark
ブール値falseテーブルをダークモードにします
details-td-class
v2.1.0+
ArrayまたはObjectまたはString詳細行のtd要素に適用するCSSクラス(またはクラス)
fields
配列fieldsフィールド名の配列またはフィールド定義オブジェクトの配列
fixed
ブール値falseすべての列を同じ幅にする(固定レイアウトテーブル)。大きなテーブルのレンダリングを高速化する。列の幅はCSSまたはcolgroupで設定可能
foot-clone
ブール値falseテーブルのフッターを有効にし、デフォルトでヘッダーコンテンツを複製します
foot-row-variant
v2.1.0+
文字列tfoot内のtr要素にBootstrapのテーマカラーバリアントを適用。head-row-variantにフォールバックする
foot-variant
文字列フッターのバリアント: 'light' または 'dark'、または未設定。foot-row-variantよりも優先される場合がある
head-row-variant
v2.1.0+
文字列thead内のtr要素にBootstrapのテーマカラーバリアントを適用
head-variant
文字列ヘッダーのバリアント: 'light' または 'dark'、または未設定。head-row-variantよりも優先される場合がある
hover
ブール値false行にホバースタイルを有効にする
id
文字列レンダリングされたコンテンツに `id` 属性を設定するために使用され、必要に応じて追加の要素IDを生成するためのベースとして使用される
items
配列[]表示するアイテムの配列
no-border-collapse
v2.0.0+
ブール値falseテーブルの境界線の折りたたみを無効にする。テーブルにスティッキーヘッダーまたは列がある場合に便利
outlined
ブール値falseテーブル要素にアウトライン境界線を追加する
primary-key
文字列行ごとに一意の値が保証されているテーブルフィールドの名前。tbodyのトランジションサポートに必要であり、テーブルのレンダリングも高速化する
responsive
Boolean または Stringfalseテーブルの幅をレスポンシブにし、水平スクロールバーを追加する。常にレスポンシブにする場合は true に設定するか、レスポンシブから通常に切り替えるためのブレークポイント('sm'、'md'、'lg'、'xl')のいずれかに設定する
small
ブール値falseテーブルを小さなセルパディングでレンダリングする
stacked
Boolean または Stringfalseテーブルをスタックモードにする。常にスタックにする場合は true に設定するか、スタックから通常に切り替えるためのブレークポイント('sm'、'md'、'lg'、'xl')のいずれかに設定する
sticky-header
Boolean または Stringfalseテーブルヘッダーをスティッキーにする。高さが最大300pxのテーブルには true に設定するか、任意の有効なCSS高さ(単位を含む)を設定する
striped
ブール値falsetbody行にストライプを適用する
table-class
ArrayまたはObjectまたはStringテーブル要素に適用するCSSクラス(またはクラス)
table-variant
文字列テーブル全体にBootstrapのテーマカラーバリアントを適用する
tbody-class
ArrayまたはObjectまたはStringtbody要素に適用するCSSクラス(またはクラス)
tbody-tr-attr
v2.2.0+
Object または Functiontbody内の各trに追加される属性、またはそのような属性を返す関数(詳細はドキュメントを参照)
tbody-tr-class
Array または Object または String または Functiontbody内のtr要素に適用するCSSクラス(またはクラス)。クラスを返す関数にすることも可能(詳細はドキュメントを参照)
tbody-transition-handlers
オブジェクトVueの 'transition-group' イベントハンドラー。提供すると、tbodyはVueの 'transition-group' コンポーネントになる
tbody-transition-props
オブジェクトVueの 'transition-group' プロパティ。提供すると、tbodyはVueの 'transition-group' コンポーネントになる
tfoot-class
ArrayまたはObjectまたはStringtfoot要素に適用するCSSクラス(またはクラス)
tfoot-tr-class
ArrayまたはObjectまたはStringtfoot内のtr要素に適用するCSSクラス(またはクラス)
thead-class
ArrayまたはObjectまたはStringthead要素に適用するCSSクラス(またはクラス)
thead-tr-class
ArrayまたはObjectまたはStringthead内のtr要素に適用するCSSクラス(またはクラス)
value
v-model
配列[]現在表示されている行データ。読み取り専用。このプロパティに値を設定しないでください

注意: HTML文字列 (*-html) をサポートするプロパティは、生のユーザー提供の値が渡された場合に、クロスサイトスクリプティング (XSS) 攻撃 に対して脆弱になる可能性があります。最初にユーザー入力を適切にサニタイズする必要があります!

v-model

プロパティ
イベント
valueinput

スロット

名前
(クリックして昇順にソート)
スコープ付き
説明
cell() フィールドデータのカスタムデータレンダリング用のデフォルトスコープ付きスロット
cell({key}) フィールドデータのカスタムデータレンダリング用のスコープ付きスロット。「{key}」はフィールドのキー名です
custom-foot B-TH / B-TDを使用したユーザー提供のB-TR用のカスタムフッターコンテンツスロット。オプションでスコープ付き
foot() フィールドフッターのカスタムレンダリング用のデフォルトスコープ付きスロット
foot({key}) フィールドフッターのカスタムレンダリング用のスコープ付きスロット。「{key}」はフィールドのキー名です
head() フィールドヘッダーのカスタムレンダリング用のデフォルトスコープ付きスロット
head({key}) フィールドヘッダーのカスタムレンダリング用のスコープ付きスロット。「{key}」はフィールドのキー名です
row-details オプションの追加レコード詳細をレンダリングするためのスコープ付きスロット。行詳細サポートの詳細はドキュメントを参照
table-caption Noテーブルのキャプション要素に表示するコンテンツ
table-colgroup カスタムcolgroupおよびcol要素を配置するスロット。オプションでスコープ付き
thead-top ユーザー提供のB-TH / B-TDを使用した`thead`要素の列ヘッダー上のスロット。オプションでスコープ付き

イベント

イベント
引数
説明
head-clicked
  1. key - クリックされた列のキー(フィールド名)
  2. field - フィールド定義オブジェクト
  3. event - ネイティブイベントオブジェクト
  4. isFooter - このイベントがフッターセルでのクリックに起因する場合は「True」
ヘッダーまたはフッターセルがクリックされたときに発生します。「custom-foot」スロットには適用されません
row-clicked
  1. item - クリックされた行のアイテムデータ
  2. index - クリックされた行のインデックス
  3. event - ネイティブイベントオブジェクト
行がクリックされたときに発生します
row-contextmenu
  1. item - 右クリックされた行のアイテムデータ
  2. index - 右クリックされた行のインデックス
  3. event - ネイティブイベントオブジェクト
行が右クリックされたときに発生します
row-dblclicked
  1. item - ダブルクリックされた行のアイテムデータ
  2. index - ダブルクリックされた行のインデックス
  3. event - ネイティブイベントオブジェクト
行がダブルクリックされたときに発生します
row-hovered
  1. item - ホバーされた行のアイテムデータ
  2. index - ホバーされた行のインデックス
  3. event - ネイティブイベントオブジェクト
行がホバーされたときに発生します
row-middle-clicked
  1. item - ミドルクリックされた行のアイテムデータ
  2. index - ミドルクリックされた行のインデックス
  3. event - ネイティブイベントオブジェクト
行がミドルクリックされたときに発生します
row-unhovered
  1. item - ホバー解除された行のアイテムデータ
  2. index - ホバー解除された行のインデックス
  3. event - ネイティブイベントオブジェクト
行のホバーが解除されたときに発生します

<b-table-simple>

プロパティ

すべてのプロパティのデフォルト値はグローバルに設定可能です。

プロパティ
(クリックして昇順にソート)
(クリックして昇順にソート)
デフォルト
説明
bordered
ブール値falseすべてのセルとヘッダーに罫線を追加します
borderless
ブール値falseセルからすべての罫線を削除します
caption-top
ブール値falseテーブルのキャプションをテーブルの上に視覚的に配置します。デフォルトは下
dark
ブール値falseテーブルをダークモードにします
fixed
ブール値falseすべての列を同じ幅にする(固定レイアウトテーブル)。大きなテーブルのレンダリングを高速化する。列の幅はCSSまたはcolgroupで設定可能
hover
ブール値false行にホバースタイルを有効にする
id
文字列レンダリングされたコンテンツに `id` 属性を設定するために使用され、必要に応じて追加の要素IDを生成するためのベースとして使用される
no-border-collapse
v2.0.0+
ブール値falseテーブルの境界線の折りたたみを無効にする。テーブルにスティッキーヘッダーまたは列がある場合に便利
outlined
ブール値falseテーブル要素にアウトライン境界線を追加する
responsive
Boolean または Stringfalseテーブルの幅をレスポンシブにし、水平スクロールバーを追加する。常にレスポンシブにする場合は true に設定するか、レスポンシブから通常に切り替えるためのブレークポイント('sm'、'md'、'lg'、'xl')のいずれかに設定する
small
ブール値falseテーブルを小さなセルパディングでレンダリングする
stacked
Boolean または Stringfalseテーブルをスタックモードにする。常にスタックにする場合は true に設定するか、スタックから通常に切り替えるためのブレークポイント('sm'、'md'、'lg'、'xl')のいずれかに設定する
sticky-header
Boolean または Stringfalseテーブルヘッダーをスティッキーにする。高さが最大300pxのテーブルには true に設定するか、任意の有効なCSS高さ(単位を含む)を設定する
striped
ブール値falsetbody行にストライプを適用する
table-class
ArrayまたはObjectまたはStringテーブル要素に適用するCSSクラス(またはクラス)
table-variant
文字列テーブル全体にBootstrapのテーマカラーバリアントを適用する

スロット

名前
説明
default テーブルに配置するコンテンツ

<b-tbody>

プロパティ

すべてのプロパティのデフォルト値はグローバルに設定可能です。

プロパティ
デフォルト
説明
tbody-transition-handlers
オブジェクトVueの 'transition-group' イベントハンドラー。提供すると、tbodyはVueの 'transition-group' コンポーネントになる
tbody-transition-props
オブジェクトVueの 'transition-group' プロパティ。提供すると、tbodyはVueの 'transition-group' コンポーネントになる

スロット

名前
説明
default tbodyに配置するコンテンツ

<b-thead>

プロパティ

すべてのプロパティのデフォルト値はグローバルに設定可能です。

プロパティ
デフォルト
説明
head-variant
文字列ヘッダーバリアント:「light」または「dark」、または未設定

スロット

名前
説明
default theadに配置するコンテンツ

<b-tfoot>

プロパティ

すべてのプロパティのデフォルト値はグローバルに設定可能です。

プロパティ
デフォルト
説明
foot-variant
文字列フッターバリアント:「light」または「dark」、または未設定

スロット

名前
説明
default tfootに配置するコンテンツ

<b-tr>

プロパティ

すべてのプロパティのデフォルト値はグローバルに設定可能です。

プロパティ
デフォルト
説明
variant
文字列Bootstrapテーマカラーバリアントのいずれかをコンポーネントに適用します

スロット

名前
説明
default trに配置するコンテンツ

<b-td>

プロパティ

すべてのプロパティのデフォルト値はグローバルに設定可能です。

プロパティ
デフォルト
説明
colspan
NumberまたはStringfieldsこのセルがまたがる列数
rowspan
NumberまたはStringfieldsこのセルがまたがる行数
stacked-heading
文字列スタックモードの場合のセルの見出し。 'tbody'要素内のセルにのみ適用可能
sticky-column
ブール値falseこれが固定列になるかどうか。この列のすべてのセルに設定する必要があります。機能するには、テーブルがsticky-headerモードまたはレスポンシブモードである必要があります
variant
文字列Bootstrapテーマカラーバリアントのいずれかをコンポーネントに適用します

スロット

名前
説明
default tdに配置するコンテンツ

<b-th>

プロパティ

すべてのプロパティのデフォルト値はグローバルに設定可能です。

プロパティ
デフォルト
説明
colspan
NumberまたはStringfieldsこのセルがまたがる列数
rowspan
NumberまたはStringfieldsこのセルがまたがる行数
stacked-heading
文字列スタックモードの場合のセルの見出し。 'tbody'要素内のセルにのみ適用可能
sticky-column
ブール値falseこれが固定列になるかどうか。この列のすべてのセルに設定する必要があります。機能するには、テーブルがsticky-headerモードまたはレスポンシブモードである必要があります
variant
文字列Bootstrapテーマカラーバリアントのいずれかをコンポーネントに適用します

個々のコンポーネントのインポート

次の名前付きエクスポートを使用して、個々のコンポーネントをプロジェクトにインポートできます

コンポーネント
名前付きエクスポート
インポートパス
<b-table>BTablebootstrap-vue
<b-table-lite>BTableLitebootstrap-vue
<b-table-simple>BTableSimplebootstrap-vue
<b-tbody>BTbodybootstrap-vue
<b-thead>BTheadbootstrap-vue
<b-tfoot>BTfootbootstrap-vue
<b-tr>BTrbootstrap-vue
<b-td>BTdbootstrap-vue
<b-th>BThbootstrap-vue

import { BTable } from 'bootstrap-vue'
Vue.component('b-table', BTable)

Vue.jsプラグインとしてのインポート

このプラグインには、上記にリストされたすべての個別のコンポーネントが含まれています。プラグインには、コンポーネントのエイリアスも含まれます。

名前付きエクスポート
インポートパス
TablePluginbootstrap-vue

このプラグインには、以下のプラグインも自動的に含まれます

  • TableLitePlugin
  • TableSimplePlugin

import { TablePlugin } from 'bootstrap-vue'
Vue.use(TablePlugin)