モーダル

モーダルは、JavaScriptとCSSで駆動される合理化された、しかし柔軟なダイアログプロンプトです。ユーザー通知から完全にカスタムコンテンツまで、多くのユースケースをサポートし、いくつかの便利なサブコンポーネント、サイズ、バリエーション、アクセシビリティなどを備えています。

<div>
  <b-button v-b-modal.modal-1>Launch demo modal</b-button>

  <b-modal id="modal-1" title="BootstrapVue">
    <p class="my-4">Hello from modal!</p>
  </b-modal>
</div>

<!-- b-modal.vue -->

概要

<b-modal>は、デフォルトでフッターにOKボタンとキャンセルボタンがあります。これらのボタンは、コンポーネントのさまざまなプロパティを設定することでカスタマイズできます。ボタンのサイズをカスタマイズしたり、ボタンを無効にしたり、キャンセルボタンを非表示にしたり(つまり、ok-only)、ok-variantおよびcancel-variantプロパティを使用してバリエーション(赤いOKボタンのdangerなど)を選択したり、ok-titleおよびcancel-titleプロパティ、または名前付きスロットmodal-okmodal-cancelを使用してカスタムボタンコンテンツを提供できます。

<b-modal>は、ESCキーでのクローズ(デフォルトで有効)、背景クリックでのクローズ(デフォルトで有効)、およびヘッダーのXクローズボタン(デフォルトで有効)をサポートしています。これらの機能は、それぞれno-close-on-escno-close-on-backdrop、およびhide-header-closeプロパティを設定することで無効にできます。

名前付きスロットmodal-titleでモーダルタイトルをオーバーライドしたり、modal-headerスロットでヘッダーを完全にオーバーライドしたり、modal-footerスロットでフッターを完全にオーバーライドしたりできます。

modal-footerスロットを使用すると、デフォルトのOKボタンとキャンセルボタンは表示されません。また、modal-headerスロットを使用すると、デフォルトのヘッダーXクローズボタンは表示されず、modal-titleスロットも使用できません。

モーダルは、表示されるまでドキュメントにコンテンツをレンダリングしません(遅延レンダリング)。モーダルは、表示されると、<body>要素に追加されてレンダリングされます。<b-modal>コンポーネントの配置は、常にプレースホルダーコメントノード(<!---->)としてレンダリングされるため、レイアウトに影響を与えません。staticプロパティを使用することで、古いBootstrapVueバージョンの動作に戻すことができます。

モーダルの表示を切り替える

<b-modal>の表示を切り替えるために使用できるいくつかの方法があります。

v-b-modalディレクティブの使用

他の要素は、v-b-modalディレクティブを使用して簡単にモーダルを表示できます。

<div>
  <!-- Using modifiers -->
  <b-button v-b-modal.my-modal>Show Modal</b-button>

  <!-- Using value -->
  <b-button v-b-modal="'my-modal'">Show Modal</b-button>

  <!-- The modal -->
  <b-modal id="my-modal">Hello From My Modal!</b-modal>
</div>

<!-- b-modal-directive.vue -->

このアプローチでは、モーダルが閉じると、フォーカスがトリガー要素に自動的に戻ります(デフォルトのBootstrap機能と同様)。モーダルの表示を切り替える他のアプローチでは、このアクセシビリティ機能を実装するために追加のコードが必要になる場合があります。

詳細については、以下のアクセシビリティセクションを参照してください。

this.$bvModal.show()およびthis.$bvModal.hide()インスタンスメソッドの使用

BootstrapVueがプラグインとしてインストールされている場合、またはModalPluginプラグインが使用されている場合、BootstrapVueは$bvModalオブジェクトをすべてのVueインスタンス(コンポーネント、アプリ)に挿入します。this.$bvModalは、いくつかのメソッドを公開し、そのうち2つはモーダルを表示および非表示にするためのものです。

メソッド 説明
this.$bvModal.show(id) 指定されたidを持つモーダルを表示します
this.$bvModal.hide(id) 指定されたidを持つモーダルを非表示にします

両方のメソッドは、呼び出された直後に戻ります。

<div>
  <b-button id="show-btn" @click="$bvModal.show('bv-modal-example')">Open Modal</b-button>

  <b-modal id="bv-modal-example" hide-footer>
    <template #modal-title>
      Using <code>$bvModal</code> Methods
    </template>
    <div class="d-block text-center">
      <h3>Hello From This Modal!</h3>
    </div>
    <b-button class="mt-3" block @click="$bvModal.hide('bv-modal-example')">Close Me</b-button>
  </b-modal>
</div>

<!-- b-modal-bv-modal-hide-show.vue -->

this.$bvModalオブジェクトは、モーダルメッセージボックスを表示するためにも使用されます。

show()hide()、およびtoggle()コンポーネントメソッドの使用

ref属性を使用してモーダルにアクセスし、show()hide()、またはtoggle()メソッドを呼び出すことができます。

<template>
  <div>
    <b-button id="show-btn" @click="showModal">Open Modal</b-button>
    <b-button id="toggle-btn" @click="toggleModal">Toggle Modal</b-button>

    <b-modal ref="my-modal" hide-footer title="Using Component Methods">
      <div class="d-block text-center">
        <h3>Hello From My Modal!</h3>
      </div>
      <b-button class="mt-3" variant="outline-danger" block @click="hideModal">Close Me</b-button>
      <b-button class="mt-2" variant="outline-warning" block @click="toggleModal">Toggle Me</b-button>
    </b-modal>
  </div>
</template>

<script>
  export default {
    methods: {
      showModal() {
        this.$refs['my-modal'].show()
      },
      hideModal() {
        this.$refs['my-modal'].hide()
      },
      toggleModal() {
        // We pass the ID of the button that we want to return focus to
        // when the modal has hidden
        this.$refs['my-modal'].toggle('#toggle-btn')
      }
    }
  }
</script>

<!-- b-modal-methods.vue -->

hide()メソッドは、モーダルを閉じるトリガーを定義するためのオプションの文字列trigger引数を受け入れます。詳細については、以下の閉じるのを防ぐセクションを参照してください。

注: $refメソッドを使用する代わりに、this.$bvModal.show()およびthis.$bvModal.hide()メソッド(前のセクションで言及)を使用することをお勧めします。

v-modelプロパティの使用

v-modelプロパティは、常に<b-modal>の表示状態と自動的に同期され、v-modelを使用して表示/非表示を切り替えることができます。

<template>
  <div>
    <b-button @click="modalShow = !modalShow">Open Modal</b-button>

    <b-modal v-model="modalShow">Hello From Modal!</b-modal>
  </div>
</template>

<script>
  export default {
    data() {
      return {
        modalShow: false
      }
    }
  }
</script>

<!-- b-modal-v-model.vue -->

v-modelプロパティを使用する場合、visibleプロパティを同時に使用しないでください

スコープ付きスロットスコープメソッドの使用

モーダルを閉じるためにスコープ付きスロットに渡されるさまざまなメソッドの使用については、スロットを使用したカスタムレンダリングセクションを参照してください。

$rootでのイベントの発行

bv::show::modalbv::hide::modal、およびbv::toggle::modalイベントを$rootで発行できます。最初の引数はモーダルのIDに設定されます。オプションの2番目の引数は、モーダルが閉じられた後にフォーカスを戻す要素を指定できます。2番目の引数には、CSSセレクター、要素参照、またはコンポーネント参照(コンポーネントのルート要素にフォーカスが当てられます)を指定できます。

<div>
  <b-button @click="showModal" ref="btnShow">Open Modal</b-button>
  <b-button @click="toggleModal" ref="btnToggle">Toggle Modal</b-button>

  <b-modal id="modal-1">
    <div class="d-block">Hello From My Modal!</div>
    <b-button @click="hideModal">Close Me</b-button>
    <b-button @click="toggleModal">Toggle Me</b-button>
  </b-modal>
</div>
export default {
  methods: {
    showModal() {
      this.$root.$emit('bv::show::modal', 'modal-1', '#btnShow')
    },
    hideModal() {
      this.$root.$emit('bv::hide::modal', 'modal-1', '#btnShow')
    },
    toggleModal() {
      this.$root.$emit('bv::toggle::modal', 'modal-1', '#btnToggle')
    }
  }
}

注: $rootイベントを発行する代わりに、this.$bvModal.show()およびthis.$bvModal.hide()メソッド(前のセクションで言及)を使用することをお勧めします。

閉じるのを防ぐ

<b-modal>が閉じるのを防ぐため(たとえば、検証が失敗した場合)、okOKボタン)、cancelキャンセルボタン)、close(モーダルヘッダーのクローズボタン)、およびhideイベントハンドラーに渡されるイベントオブジェクトの.preventDefault()メソッドを呼び出すことができます。 .preventDefault()は、使用する場合は、非同期はサポートされていないため、必ず同期的に呼び出す必要があることに注意してください。

<template>
  <div>
    <b-button v-b-modal.modal-prevent-closing>Open Modal</b-button>

    <div class="mt-3">
      Submitted Names:
      <div v-if="submittedNames.length === 0">--</div>
      <ul v-else class="mb-0 pl-3">
        <li v-for="name in submittedNames">{{ name }}</li>
      </ul>
    </div>

    <b-modal
      id="modal-prevent-closing"
      ref="modal"
      title="Submit Your Name"
      @show="resetModal"
      @hidden="resetModal"
      @ok="handleOk"
    >
      <form ref="form" @submit.stop.prevent="handleSubmit">
        <b-form-group
          label="Name"
          label-for="name-input"
          invalid-feedback="Name is required"
          :state="nameState"
        >
          <b-form-input
            id="name-input"
            v-model="name"
            :state="nameState"
            required
          ></b-form-input>
        </b-form-group>
      </form>
    </b-modal>
  </div>
</template>

<script>
  export default {
    data() {
      return {
        name: '',
        nameState: null,
        submittedNames: []
      }
    },
    methods: {
      checkFormValidity() {
        const valid = this.$refs.form.checkValidity()
        this.nameState = valid
        return valid
      },
      resetModal() {
        this.name = ''
        this.nameState = null
      },
      handleOk(bvModalEvent) {
        // Prevent modal from closing
        bvModalEvent.preventDefault()
        // Trigger submit handler
        this.handleSubmit()
      },
      handleSubmit() {
        // Exit when the form isn't valid
        if (!this.checkFormValidity()) {
          return
        }
        // Push the name to submitted names
        this.submittedNames.push(this.name)
        // Hide the modal manually
        this.$nextTick(() => {
          this.$bvModal.hide('modal-prevent-closing')
        })
      }
    }
  }
</script>

<!-- b-modal-prevent-closing.vue -->

:イベントokcancel、およびcloseは、モーダル組み込みのOKキャンセル、およびヘッダーのクローズ(X)ボタンによってそれぞれ発行されます。modal-footerスロットに独自のボタンを指定した場合、またはフッターを非表示にした場合、デフォルトではこれらのイベントは発行されません。この場合、hideイベントを使用して、モーダルのクローズのキャンセルを制御します。イベントhideは、okcancel、およびcloseが発行された場合でも常に発行されます。

okcancelcloseおよびhideイベントオブジェクト(BvModalEvent)には、いくつかのプロパティとメソッドが含まれています

プロパティまたはメソッド タイプ 説明
preventDefault() メソッド 呼び出されると、モーダルが閉じるのを防ぎます
trigger プロパティ 次のいずれかになります: ok (デフォルトの OK がクリックされた場合), cancel (デフォルトの キャンセル がクリックされた場合), esc (Escキーが押された場合), backdrop (背景がクリックされた場合), headerclose (ヘッダーの X ボタンがクリックされた場合)、hide() メソッドに提供された最初の引数、またはそれ以外の場合は null
target プロパティ モーダル要素への参照
vueTarget プロパティ モーダルの Vue VM インスタンスへの参照
componentId プロパティ モーダルの ID

trigger の値は、コンポーネントの hide() メソッドに引数を渡すことで、詳細な制御(モーダルを非表示にしたボタンやアクションの検出など)が可能です。

注: ok, cancel, または close イベントは、hide() の引数がそれぞれ厳密に 'ok', 'cancel', または 'headerclose' の場合にのみ発生します。hide() に渡された引数は、イベントオブジェクトの trigger プロパティに格納されます。

グリッドの使用

モーダル内で Bootstrap グリッドシステムを使用するには、modal-body 内に <b-container fluid> をネストします。その後、通常のグリッドシステム <b-row> (または <b-form-row>) と <b-col> を他の場所と同じように使用します。

ツールチップとポップオーバー

ツールチップとポップオーバーは、必要に応じてモーダル内に配置できます。モーダルが閉じられると、内部にあるツールチップとポップオーバーも自動的に閉じられます。ツールチップとポップオーバーは、モーダル要素に自動的に追加されます(正しいz-indexを確保するため)。ただし、コンテナIDを指定することで、追加先をオーバーライドできます(詳細はツールチップとポップオーバーのドキュメントを参照)。

<div>
  <b-button v-b-modal.modalPopover>Show Modal</b-button>

  <b-modal id="modalPopover" title="Modal with Popover" ok-only>
    <p>
      This
      <b-button v-b-popover="'Popover inside a modal!'" title="Popover">Button</b-button>
      triggers a popover on click.
    </p>
    <p>
      This <a href="#" v-b-tooltip title="Tooltip in a modal!">Link</a> will show a tooltip on
      hover.
    </p>
  </b-modal>
</div>

<!-- b-modal-popover.vue -->

遅延読み込みと静的モーダル

デフォルトでは、モーダルは表示されるまでドキュメント内にコンテンツをレンダリングしません(遅延レンダリング)。表示されている場合、モーダルは <body> 要素に追加されてレンダリングされます。<b-modal> コンポーネントは、DOM 内に配置された場所にプレースホルダーのコメントノード (<!---->) としてレンダリングされるため、レイアウトには影響しません。ポータリング処理のため、コンテンツの変更をターゲットにレンダリングするには、2回以上の $nextTick が必要になる場合があります。

static プロパティを true に設定することで、モーダルをドキュメントのその場<b-modal> コンポーネントがドキュメント内に配置された場所)にレンダリングできます。 statictrue の場合、モーダルが表示されていない/表示されていない場合でも、モーダルのコンテンツは DOM にレンダリングされることに注意してください。static モーダルを遅延レンダリングするには、lazy プロパティも true に設定します。その後、モーダルは表示されている場合にのみドキュメントに表示されます。static モードの場合、<b-modal> コンポーネントの配置がドキュメントとモーダルのレイアウトに影響を与える可能性があることに注意してください。

static プロパティが true でない場合、lazy プロパティは効果がありません(非静的モーダルは常に遅延レンダリングされます)。

スタイル、オプション、およびカスタマイズ

モーダルには、プロパティ size を介して利用できる3つのオプションサイズがあります。これらのサイズは、狭いビューポートで水平スクロールバーを避けるために、特定のブレークポイントで有効になります。有効なオプションサイズは、smlg、および xl です。

<div>
  <b-button v-b-modal.modal-xl variant="primary">xl modal</b-button>
  <b-button v-b-modal.modal-lg variant="primary">lg modal</b-button>
  <b-button v-b-modal.modal-sm variant="primary">sm modal</b-button>

  <b-modal id="modal-xl" size="xl" title="Extra Large Modal">Hello Extra Large Modal!</b-modal>
  <b-modal id="modal-lg" size="lg" title="Large Modal">Hello Large Modal!</b-modal>
  <b-modal id="modal-sm" size="sm" title="Small Modal">Hello Small Modal!</b-modal>
</div>

<!-- b-modal-sizes.vue -->

size プロパティは、サイズを .modal-<size> クラスにマッピングします。

長いコンテンツのスクロール

モーダルがユーザーのビューポートまたはデバイスに対して長すぎる場合、ページ自体とは独立してスクロールします。意味を理解するために、以下のデモを試してみてください。

<div>
  <b-button v-b-modal.modal-tall>Launch overflowing modal</b-button>

  <b-modal id="modal-tall" title="Overflowing Content">
    <p class="my-4" v-for="i in 20" :key="i">
      Cras mattis consectetur purus sit amet fermentum. Cras justo odio, dapibus ac facilisis
      in, egestas eget quam. Morbi leo risus, porta ac consectetur ac, vestibulum at eros.
    </p>
  </b-modal>
</div>

<!-- b-modal-scroll-overflow.vue -->

プロパティ scrollabletrue に設定して、モーダル本体のスクロールを可能にするスクロール可能なモーダルを作成することもできます。

<div>
  <b-button v-b-modal.modal-scrollable>Launch scrolling modal</b-button>

  <b-modal id="modal-scrollable" scrollable title="Scrollable Content">
    <p class="my-4" v-for="i in 20" :key="i">
      Cras mattis consectetur purus sit amet fermentum. Cras justo odio, dapibus ac facilisis
      in, egestas eget quam. Morbi leo risus, porta ac consectetur ac, vestibulum at eros.
    </p>
  </b-modal>
</div>

<!-- b-modal-scrollable-content.vue -->

垂直方向に中央揃えのモーダル

centered プロパティを設定して、ビューポートでモーダルを垂直方向に中央揃えにします。

<div>
  <b-button v-b-modal.modal-center>Launch centered modal</b-button>

  <b-modal id="modal-center" centered title="BootstrapVue">
    <p class="my-4">Vertically centered modal!</p>
  </b-modal>
</div>

<!-- b-modal-center-vertically.vue -->

垂直方向に centeredscrollable と組み合わせて使用してもかまいません。

バリアント

header-bg-variant, header-text-variant, body-bg-variant, body-text-variant, footer-bg-variant, そして footer-text-variant プロパティを設定して、ヘッダー、フッター、および本文の背景とテキストのバリアントを制御します。 danger, warning, info, success, dark, light など、標準の Bootstrap バリアントを使用します。

ヘッダーの下部ボーダーとフッターの上部ボーダーのバリアントは、それぞれ header-border-variantfooter-border-variant プロパティで制御できます。

<template>
  <div>
    <b-button @click="show=true" variant="primary">Show Modal</b-button>

    <b-modal
      v-model="show"
      title="Modal Variants"
      :header-bg-variant="headerBgVariant"
      :header-text-variant="headerTextVariant"
      :body-bg-variant="bodyBgVariant"
      :body-text-variant="bodyTextVariant"
      :footer-bg-variant="footerBgVariant"
      :footer-text-variant="footerTextVariant"
    >
      <b-container fluid>
        <b-row class="mb-1 text-center">
          <b-col cols="3"></b-col>
          <b-col>Background</b-col>
          <b-col>Text</b-col>
        </b-row>

        <b-row class="mb-1">
          <b-col cols="3">Header</b-col>
          <b-col>
            <b-form-select
              v-model="headerBgVariant"
              :options="variants"
            ></b-form-select>
          </b-col>
          <b-col>
            <b-form-select
              v-model="headerTextVariant"
              :options="variants"
            ></b-form-select>
          </b-col>
        </b-row>

        <b-row class="mb-1">
          <b-col cols="3">Body</b-col>
          <b-col>
            <b-form-select
              v-model="bodyBgVariant"
              :options="variants"
            ></b-form-select>
          </b-col>
          <b-col>
            <b-form-select
              v-model="bodyTextVariant"
              :options="variants"
            ></b-form-select>
          </b-col>
        </b-row>

        <b-row>
          <b-col cols="3">Footer</b-col>
          <b-col>
            <b-form-select
              v-model="footerBgVariant"
              :options="variants"
            ></b-form-select>
          </b-col>
          <b-col>
            <b-form-select
              v-model="footerTextVariant"
              :options="variants"
            ></b-form-select>
          </b-col>
        </b-row>
      </b-container>

      <template #modal-footer>
        <div class="w-100">
          <p class="float-left">Modal Footer Content</p>
          <b-button
            variant="primary"
            size="sm"
            class="float-right"
            @click="show=false"
          >
            Close
          </b-button>
        </div>
      </template>
    </b-modal>
  </div>
</template>

<script>
  export default {
    data() {
      return {
        show: false,
        variants: ['primary', 'secondary', 'success', 'warning', 'danger', 'info', 'light', 'dark'],
        headerBgVariant: 'dark',
        headerTextVariant: 'light',
        bodyBgVariant: 'light',
        bodyTextVariant: 'dark',
        footerBgVariant: 'warning',
        footerTextVariant: 'dark'
      }
    }
  }
</script>

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

modal-class, content-class, header-class, body-class そして footer-class プロパティを介して、モーダルダイアログコンテナ、コンテンツ(モーダルウィンドウ自体)、ヘッダー、本文、およびフッターに任意のクラスを適用することもできます。プロパティは、文字列または文字列の配列を受け入れます。

背景の非表示

hide-backdrop プロパティを設定して、モーダルの背景を非表示にします。

<div>
  <b-button v-b-modal.modal-no-backdrop>Open modal</b-button>

  <b-modal id="modal-no-backdrop" hide-backdrop content-class="shadow" title="BootstrapVue">
    <p class="my-2">
      We've added the utility class <code>'shadow'</code>
      to the modal content for added effect.
    </p>
  </b-modal>
</div>

<!-- modal-no-backdrop.vue -->

背景が非表示になっている場合でも、モーダルの外側をクリックするとモーダルが閉じることに注意してください。 <b-modal>no-close-on-backdrop プロパティを設定することで、この動作を無効にできます。

開閉アニメーションの無効化

モーダルが開閉するときのフェードトランジション/アニメーションを無効にするには、<b-modal> コンポーネントにプロパティ no-fade を設定するだけです。

デフォルトフッターのボタンを小さくまたは大きくしたいですか?小さいボタンには button-size プロパティを 'sm' に、大きいボタンには 'lg' に設定するだけです。

<div>
  <b-button v-b-modal.modal-footer-sm>Small Footer Buttons</b-button>
  <b-button v-b-modal.modal-footer-lg>Large Footer Buttons</b-button>

  <b-modal id="modal-footer-sm" title="BootstrapVue" button-size="sm">
    <p class="my-2">This modal has small footer buttons</p>
  </b-modal>

  <b-modal id="modal-footer-lg" title="BootstrapVue" button-size="lg">
    <p class="my-2">This modal has large footer buttons</p>
  </b-modal>
</div>

<!-- modal-footer-btn-sizes.vue -->

modal-footer スロットを使用して独自のフッターを提供した場合、プロパティ button-size は効果がありません。

組み込みのフッターボタンをプログラムで無効にできます。

cancel-disabled プロパティと ok-disabled プロパティをそれぞれ true に設定することにより、キャンセルボタンと OK ボタンを個別に無効にできます。ボタンを再度有効にするには、プロパティを false に設定します。

キャンセルボタンと OK ボタンの両方を同時に無効にするには、busy プロパティを true に設定するだけです。両方のボタンを再度有効にするには、false に設定します。

スロットを使用したカスタムレンダリング

<b-modal> は、モーダルのさまざまなセクションのコンテンツをカスタマイズするために使用できる、いくつかの名前付きスロット(そのうちのいくつかはオプションでスコープ指定されています)を提供します。

スロット オプションでスコープ指定 説明
default はい モーダルのメインコンテンツ
modal-title はい モーダルのタイトルに配置するコンテンツ
modal-header はい ヘッダーに配置するコンテンツ。閉じるボタンを含むヘッダー全体を置き換えます
modal-footer はい フッターに配置するコンテンツ。ボタンを含むフッター全体を置き換えます
modal-ok いいえ フッターのOKボタンの内側に配置するコンテンツ
modal-cancel いいえ フッターのキャンセルボタンの内側に配置するコンテンツ
modal-header-close いいえ ヘッダーの閉じる(x)ボタンの内側に配置するコンテンツ

オプションのスコープ指定をサポートするスロットで利用可能なスコープは次のとおりです。

メソッドまたはプロパティ 説明
ok() モーダルを閉じ、ok イベントと hide イベントを発生させます。bvModalEvent.trigger = 'ok'
cancel() モーダルを閉じ、cancel イベントと hide イベントを発生させます。bvModalEvent.trigger = 'cancel'
close() モーダルを閉じ、close イベントと hide イベントを発生させます。bvModalEvent.trigger = 'headerclose'
hide(trigger) モーダルを閉じ、hide イベントを発生させます。bvModalEvent.trigger = trigger(triggerはオプション)
visible モーダルの可視状態。モーダルが表示されている場合は true、表示されていない場合は false

カスタムスコープスロットを使用したモーダルの例

<template>
  <b-button @click="$bvModal.show('modal-scoped')">Open Modal</b-button>

  <b-modal id="modal-scoped">
    <template #modal-header="{ close }">
      <!-- Emulate built in modal header close button action -->
      <b-button size="sm" variant="outline-danger" @click="close()">
        Close Modal
      </b-button>
      <h5>Modal Header</h5>
    </template>

    <template #default="{ hide }">
      <p>Modal Body with button</p>
      <b-button @click="hide()">Hide Modal</b-button>
    </template>

    <template #modal-footer="{ ok, cancel, hide }">
      <b>Custom Footer</b>
      <!-- Emulate built in modal footer ok and cancel button actions -->
      <b-button size="sm" variant="success" @click="ok()">
        OK
      </b-button>
      <b-button size="sm" variant="danger" @click="cancel()">
        Cancel
      </b-button>
      <!-- Button with custom close trigger value -->
      <b-button size="sm" variant="outline-secondary" @click="hide('forget')">
        Forget it
      </b-button>
    </template>
  </b-modal>
</template>

<!-- b-modal-scoped-slots.vue -->

複数のモーダルサポート

ネイティブな Bootstrap v4 とは異なり、BootstrapVue は同時に複数のモーダルを開くことをサポートしています。

特定のモーダルのスタックを無効にするには、<b-modal> コンポーネントにプロップno-stackingを設定してください。これにより、別のモーダルが表示される前にモーダルが非表示になります。

<div>
  <b-button v-b-modal.modal-multi-1>Open First Modal</b-button>

  <b-modal id="modal-multi-1" size="lg" title="First Modal" ok-only no-stacking>
    <p class="my-2">First Modal</p>
    <b-button v-b-modal.modal-multi-2>Open Second Modal</b-button>
  </b-modal>

  <b-modal id="modal-multi-2" title="Second Modal" ok-only>
    <p class="my-2">Second Modal</p>
    <b-button v-b-modal.modal-multi-3 size="sm">Open Third Modal</b-button>
  </b-modal>

  <b-modal id="modal-multi-3" size="sm" title="Third Modal" ok-only>
    <p class="my-1">Third Modal</p>
  </b-modal>
</div>

<!-- b-modal-multiple.vue -->

注意点

  • <b-modal>を別の<b-modal>内部にネストすることは避けてください。親モーダルダイアログの境界に「制約される」可能性があるためです(特に静的モーダルを使用する場合)。
  • 不透明な背景は、開かれる各モーダルに対して徐々に暗くなります。これは、各背景が他のモーダルと背景の上に開かれるため、想定される動作です。

BootstrapVueは、公開されているthis.$bvModalオブジェクトに、いくつかの組み込みメッセージボックスメソッドを提供します。これらのメソッドは、ページに明示的に<b-modal>コンポーネントを配置することなく、アプリのどこからでもシンプルなOKおよび確認スタイルのモーダルメッセージを生成する方法を提供します。

メソッド 説明
this.$bvModal.msgBoxOk(message, options) コンテンツとしてmessageと単一のOKボタンを持つモーダルを開きます
this.$bvModal.msgBoxConfirm(message, options) コンテンツとしてmessageとCANCELボタンとOKボタンを持つモーダルを開きます

options引数は、メッセージボックスモーダルにタイトルを追加したり、スタイルを設定したりするためのオプションの構成オブジェクトです。オブジェクトのプロパティは、<b-modal>のプロパティに対応しますが、kebab-caseの代わりにcamelCase形式になります。

両方のメソッドは、モーダルが非表示になったときに値に解決するPromiseを返します(IE 11および古いブラウザのサポートにはポリフィルが必要です)。.msgBoxOk()は常に値trueに解決しますが、.msgBoxConfirm()true(OKボタンが押された場合)、false(CANCELボタンが押された場合)、またはnull(背景クリック、Escキーを押す、またはその他の手段でモーダルが閉じられた場合)に解決します。

messageが指定されていない場合、両方のメソッドはすぐに値undefinedを返します。

.then(..).catch(...)または非同期awaitコードスタイルのいずれかを使用できます(非同期awaitは最新のブラウザまたはトランスパイラが必要です)。

OKメッセージボックス

OKメッセージボックスの例

<template>
  <div>
    <div class="mb-2">
     <b-button @click="showMsgBoxOne">Simple msgBoxOk</b-button>
     Return value: {{ String(boxOne) }}
    </div>
    <div class="mb-1">
     <b-button @click="showMsgBoxTwo">msgBoxOk with options</b-button>
     Return value: {{ String(boxTwo) }}
    </div>
  </div>
</template>

<script>
  export default {
    data() {
      return {
        boxOne: '',
        boxTwo: ''
      }
    },
    methods: {
      showMsgBoxOne() {
        this.boxOne = ''
        this.$bvModal.msgBoxOk('Action completed')
          .then(value => {
            this.boxOne = value
          })
          .catch(err => {
            // An error occurred
          })
      },
      showMsgBoxTwo() {
        this.boxTwo = ''
        this.$bvModal.msgBoxOk('Data was submitted successfully', {
          title: 'Confirmation',
          size: 'sm',
          buttonSize: 'sm',
          okVariant: 'success',
          headerClass: 'p-2 border-bottom-0',
          footerClass: 'p-2 border-top-0',
          centered: true
        })
          .then(value => {
            this.boxTwo = value
          })
          .catch(err => {
            // An error occurred
          })
      }
    }
  }
</script>

<!-- b-modal-msg-box-ok.vue -->

確認メッセージボックス

確認メッセージボックスの例

<template>
  <div>
    <div class="mb-2">
     <b-button @click="showMsgBoxOne">Simple msgBoxConfirm</b-button>
     Return value: {{ String(boxOne) }}
    </div>
    <div class="mb-1">
     <b-button @click="showMsgBoxTwo">msgBoxConfirm with options</b-button>
     Return value: {{ String(boxTwo) }}
    </div>
  </div>
</template>

<script>
  export default {
    data() {
      return {
        boxOne: '',
        boxTwo: ''
      }
    },
    methods: {
      showMsgBoxOne() {
        this.boxOne = ''
        this.$bvModal.msgBoxConfirm('Are you sure?')
          .then(value => {
            this.boxOne = value
          })
          .catch(err => {
            // An error occurred
          })
      },
      showMsgBoxTwo() {
        this.boxTwo = ''
        this.$bvModal.msgBoxConfirm('Please confirm that you want to delete everything.', {
          title: 'Please Confirm',
          size: 'sm',
          buttonSize: 'sm',
          okVariant: 'danger',
          okTitle: 'YES',
          cancelTitle: 'NO',
          footerClass: 'p-2',
          hideHeaderClose: false,
          centered: true
        })
          .then(value => {
            this.boxTwo = value
          })
          .catch(err => {
            // An error occurred
          })
      }
    }
  }
</script>

<!-- b-modal-msg-box-confirm.vue -->

メッセージボックスの注意点

  • this.$bvModalインジェクションは、完全なBootstrapVueプラグインまたはModalPluginプラグインを使用している場合にのみ使用できます。b-modalコンポーネントのみをインポートしている場合は使用できません。インジェクションのみをインポートするには、BVModalPluginプラグインを使用してください。
  • 新しい$bvModalインジェクション(mixin)は、各Vue仮想マシン(つまり、インスタンス化された各コンポーネント)に対して作成され、インスタンスのthisおよび$rootコンテキストへのアクセスが必要なため、Vue.prototypeへの直接アクセスを介しては使用できません。
  • メッセージボックスには、ブラウザでのPromiseサポートが必要です。IE 11など古いブラウザをアプリのターゲットにしている場合は、Promiseサポートを提供するポリフィルを含めてください。Promiseサポートが検出されない場合、メッセージボックスメソッドはすぐにundefinedを返します。
  • メッセージボックスは、<b-modal>コンポーネントの拡張であり、したがって、次のプロパティを除いて、ほとんどの<b-modal>プロパティ(camelCase形式を使用)をサポートします。lazystaticbusyvisiblenoStackingokOnlyokDisabled、およびcancelDisabled
  • オプションでtitle(またはtitleHtml)が指定されていない場合、ヘッダーは表示されません。
  • オプションでtitle(またはtitleHtml)が指定されている場合、ヘッダークローズボタンはデフォルトでは表示されません。オプションでhideHeaderClose: falseを設定することで、ヘッダークローズボタンを有効にできます。
  • メッセージボックスは、非表示になる前に閉じたり破棄されたりすると、エラー(Promiseのリジェクト)をスローします。非同期のawaitスタイルのコードを使用している場合でも、常に.catch(errHandler)リジェクトハンドラーを含めてください。
  • Vue Router(または同様のもの)を使用する場合、モーダルが非表示になる前にルートが変更されると、メッセージボックスは閉じてリジェクトされます。ルートが変更されたときにメッセージボックスを開いたままにする場合は、this.$bvModalの代わりにthis.$root.$bvModalを使用します。
  • メッセージボックスは、サーバーサイドレンダリング(SSR)中に生成することはできません。
  • メッセージボックスのmessageは現在、HTML文字列をサポートしていませんが、マークアップを細かく制御するために、VNodes配列messageとして渡すことができます。Vueのthis.$createElementメソッドを使用してVNodesを生成できます。これは、モーダルタイトル(VNodesをtitleオプションに渡すことによって)、OKボタンのテキスト(okTitleオプションを介して)、およびCANCELボタンのテキスト(cancelTitleオプションを介して)にも行うことができます。

メッセージボックスの高度な使用法

モーダルを生成するためのthis.$bvModal.msgBoxOk(...)またはthis.$bvModal.msgBoxConfirm(...)メソッドを使用する場合、モーダルコンテンツは単なる文字列メッセージ以上のものにしたい場合があります。メッセージボックスの注意点セクションで説明したように、より複雑なコンテンツのために、メッセージとタイトルとしてVNodesの配列を渡すことができます。

Vueのthis.$createElementメソッドを使用してVNodesを生成します。

<template>
  <div>
    <b-button @click="showMsgOk">Show OK message box with custom content</b-button>
  </div>
</template>

<script>
  export default {
    methods: {
      showMsgOk() {
        const h = this.$createElement
        // Using HTML string
        const titleVNode = h('div', { domProps: { innerHTML: 'Title from <i>HTML<i> string' } })
        // More complex structure
        const messageVNode = h('div', { class: ['foobar'] }, [
          h('p', { class: ['text-center'] }, [
            ' Flashy ',
            h('strong', 'msgBoxOk'),
            ' message ',
          ]),
          h('p', { class: ['text-center'] }, [h('b-spinner')]),
          h('b-img', {
            props: {
              src: 'https://picsum.photos/id/20/250/250',
              thumbnail: true,
              center: true,
              fluid: true, rounded: 'circle'
            }
          })
        ])
        // We must pass the generated VNodes as arrays
        this.$bvModal.msgBoxOk([messageVNode], {
          title: [titleVNode],
          buttonSize: 'sm',
          centered: true, size: 'sm'
        })
      }
    }
  }
</script>

<!-- modal-msg-box-advanced.vue -->

$rootイベントを介したモーダル変更のリスニング

モーダルが開くのをリッスンするには、次を使用します

export default {
  mounted() {
    this.$root.$on('bv::modal::show', (bvEvent, modalId) => {
      console.log('Modal is about to be shown', bvEvent, modalId)
    })
  }
}

発行されるイベントの完全なリストについては、このドキュメントのイベントセクションを参照してください。

アクセシビリティ

<b-modal>は、自動フォーカス、フォーカス復帰、キーボード(タブ)フォーカスコンテインメント、および自動aria-*属性を含む、いくつかのアクセシビリティ機能を提供します。

注:このコンポーネントのアニメーション効果は、prefers-reduced-motionメディアクエリに依存します。詳細については、アクセシビリティドキュメントの低減された動きセクションを参照してください。

aria-labelledby属性とaria-describedby属性は、ほとんどの場合、モーダルに自動的に表示されます。

  • ヘッダーを非表示にしたり、独自のヘッダーを提供したり、モーダルタイトルを提供していない場合は、aria-labelledby属性は表示されません。(組み込みヘッダーを使用している場合は)モーダルにタイトルを提供することをお勧めします。title-sr-onlyプロパティを設定することで、ヘッダータイトルを視覚的に非表示にしながら、スクリーンリーダーで利用できるようにすることができます。ヘッダーがない場合は、aria-labelプロパティに文字列を渡すことで、モーダルのラベルを提供できます。
  • aria-describedby属性は、常にモーダルの本文コンテンツを指します。
  • aria-labelプロパティが文字列値で指定されている場合、モーダルにタイトル/ヘッダーがある場合でも、aria-labelledby属性はレンダリングされません。

aria-labelプロパティとtitle-sr-onlyプロパティは、バージョンv2.0.0-rc.27で追加されました。

開いたときに自動フォーカス

<b-modal>は、開いたときにモーダルコンテナを自動フォーカスします。

<b-modal>内の要素を事前にフォーカスするには、<b-modal>shownイベントをリッスンし、要素のfocus()メソッドを呼び出します。<b-modal>は、<b-modal>内に要素がすでにフォーカスを持っている場合、自動フォーカスを試行しません。

<b-modal @shown="focusMyElement">
  <div>
    <b-button>I Don't Have Focus</b-button>
  </div>

  <div>
    <b-form-input></b-form-input>
  </div>

  <div>
    <!-- Element to gain focus when modal is opened -->
    <b-form-input ref="focusThis"></b-form-input>
  </div>

  <div>
    <b-form-input></b-form-input>
  </div>
</b-modal>
export default {
  methods: {
    focusMyElement() {
      this.$refs.focusThis.focus()
    }
  }
}

または、b-form-*フォームコントロールを使用している場合は、モーダルが開いたときにフォームコントロールを自動的にフォーカスするために、autofocusプロパティを使用できます。autofocusは、b-form-*コントロールがDOMにマウントされたときに発生するため、lazyプロパティが設定されていないstaticプロパティを使用すると、autofocusプロパティはb-modalでは機能しないことに注意してください。

組み込みのモーダルボタン(okcancel、またはヘッダーのcloseボタン)のいずれかを自動フォーカスする場合は、プロパティauto-focus-button'ok''cancel'、または'close'の値のいずれかに設定できます。そして、<b-modal>は、指定されたボタンが存在する場合にそれをフォーカスします。この機能は、モーダルメッセージボックスでも利用できます。

注:アクセシビリティ上の理由から、モーダル内の入力またはコントロールを自動フォーカスすることは推奨されません。スクリーンリーダーのユーザーは、入力がどこにあるかのコンテキストを知ることができないためです(モーダルのアナウンスが発音されない場合があります)。<b-modal>にモーダルのコンテナをフォーカスさせ、モーダル情報がユーザーに伝えられるようにし、その後、ユーザーがタブで入力を移動できるようにするのが最善です。

トリガー要素へのフォーカス復帰

アクセシビリティ上の理由から、モーダルを閉じたときに、モーダルの開くをトリガーした要素にフォーカスを戻すことが望ましいです。

<b-modal> は、モーダルが開かれる前にフォーカスを持っていた要素を自動的に判別し、可能であればモーダルが非表示になったときにその要素にフォーカスを戻そうとします。ただし、モーダルが非表示になったときにフォーカスを戻す要素を指定するためのいくつかのメソッドとオプションが用意されています。

return-focus プロパティによるフォーカスを戻す要素の指定

モーダルが閉じるときにフォーカスを戻す要素は、return-focus プロパティに以下のいずれかを設定することで指定することもできます。

  • CSSクエリセレクター文字列(または # が前に付いた要素ID)
  • コンポーネント参照(<b-button> など、フォーカス可能な要素にマウントされているもの)
  • フォーカス可能なDOM要素への参照

渡された要素がフォーカス可能でない場合、ブラウザが何にフォーカスがあるかを判断します(通常は <body> になり、望ましくありません)。

このフォーカスを戻す方法は、<b-modal> のメソッド show() および hide()、または v-model プロパティを使用する場合に便利です。このプロパティは、フォーカスを戻す要素を指定する他の方法よりも優先されることに注意してください。

自動フォーカス復帰

<b-modal> が要素の v-b-modal ディレクティブを介して開かれた場合、return-focus プロパティで要素が指定されていない限り、<b-modal> が閉じるときにフォーカスはこの要素に自動的に戻されます。

イベントによるフォーカスを戻す要素の指定

bv::show::modal イベント($root で発行)を使用する場合、2番目の引数としてフォーカスを戻す要素を指定できます。この引数は、return-focus プロパティと同じ型を受け入れます。

this.$root.$emit('bv::show::modal', 'modal-1', '#focusThisOnClose')

ヒント: クリックイベント(または同様のイベント)を使用してモーダルを開くトリガーにする場合は、イベントの target プロパティを渡してください。

<div>
  <b-button @click="$root.$emit('bv::show::modal', 'modal-1', $event.target)">Open Modal</b-button>
</div>

注意: <b-modal>return-focus プロパティが設定されている場合、イベントを介して指定された要素は無視されます。

キーボードナビゲーション

<b-modal> 内の要素をタブで移動する際、フォーカスがモーダルからドキュメントに移動しようとすると、モーダル内に戻されます。

モーダル内の要素に tabindex0 または -1 以外の値に設定することは避けてください。そうすると、支援技術に依存する人がページコンテンツをナビゲートおよび操作するのが困難になり、キーボードナビゲーションで一部の要素に到達できなくなる可能性があります。

モーダルの外部のいくつかの要素をフォーカス可能にする必要がある場合(例:TinyMCE)、それらをCSSセレクターとして ignore-enforce-focus-selector プロパティに追加できます 2.4.0+。例:

<b-modal
  id="some-modal-id"
  title="Modal with TinyMCE Editor"
  ignore-enforce-focus-selector=".tox-tinymce-aux, .moxman-window, .tam-assetmanager-root"
>
  <!-- Modal content with TinyMCE editor here -->
</b-modal>

場合によっては、フォーカス強制機能を完全に無効にする必要がある場合があります。これは、プロパティ no-enforce-focus を設定することで可能ですが、アクセシビリティ上の理由から強く推奨されません

v-b-modal ディレクティブのアクセシビリティ

v-b-modal ディレクティブのアクセシビリティに関する注意事項

  • 要素が <button> (または <button> をレンダリングするコンポーネント)以外の場合、ARIA rolebutton に設定され、Enter および Space のkeydownイベントリスナーが、click リスナーとともに追加されます。
  • 要素が <button> または <a> (またはどちらかをレンダリングするコンポーネント)以外の場合、tabindex0 に設定され、アクセシビリティが確保されます。ただし、すでに tabindex が設定されている場合は除きます。

コンポーネント参照

<b-modal>

プロパティ

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

プロパティ
(クリックして昇順にソート)
タイプ
(クリックして昇順にソート)
デフォルト
説明
aria-label
文字列モーダルの 'aria-label' 属性を明示的に指定します。モーダルにタイトルがない場合は設定する必要があります。設定されていない場合は、'aria-labelledby' がモーダルのタイトルを指します
auto-focus-button
v2.0.0+
文字列nullモーダルが開いたときにフォーカスする組み込みボタンを指定します: 'ok'、'cancel'、または 'close'
body-bg-variant
文字列Bootstrapのテーマカラーバリアントの1つをbodyの背景に適用します
body-class
Array または Object または String'.modal-body'ラッパー要素に適用するCSSクラス(またはクラス)
body-text-variant
文字列Bootstrapのテーマカラーバリアントの1つをbodyのテキストに適用します
busy
真偽値false組み込みのデフォルトフッターのOKボタンとキャンセルボタンを無効状態にします
button-size
文字列組み込みのフッターボタンのサイズ: 'sm'、'md' (デフォルト)、または 'lg'
cancel-disabled
真偽値falseデフォルトのフッターのキャンセルボタンを無効状態にします
cancel-title
文字列'キャンセル'デフォルトのフッターのキャンセルボタンに配置するテキスト文字列
cancel-title-html
注意して使用してください
文字列デフォルトのフッターのキャンセルボタンに配置するHTML文字列
cancel-variant
文字列'secondary'デフォルトのフッターのキャンセルボタンに適用するボタンの色のテーマバリアント
centered
真偽値falseモーダルをビューポートの中央に垂直に配置します
content-class
Array または Object または String'.modal-content' ラッパー要素に適用する CSS クラス (またはクラス)
dialog-class
Array または Object または String'.modal-dialog' ラッパー要素に適用する CSS クラス (またはクラス)
footer-bg-variant
文字列Bootstrapのテーマカラーバリアントの1つをフッターの背景に適用します
footer-border-variant
文字列Bootstrapのテーマカラーバリアントの1つをフッターの境界線に適用します
footer-class
Array または Object または String'.modal-footer' ラッパー要素に適用する CSS クラス (またはクラス)
footer-tag
v2.22.0+
文字列'footer'フッターのデフォルトタグの代わりにレンダリングするHTMLタグを指定します
footer-text-variant
文字列Bootstrapのテーマカラーバリアントの1つをフッターのテキストに適用します
header-bg-variant
文字列Bootstrapのテーマカラーバリアントの1つをヘッダーの背景に適用します
header-border-variant
文字列Bootstrapのテーマカラーバリアントの1つをヘッダーの境界線に適用します
header-class
Array または Object または String'.modal-header' ラッパー要素に適用する CSS クラス (またはクラス)
header-close-content
v2.3.0+
文字列'&times;'ヘッダーの閉じるボタンの内容
header-close-label
文字列'閉じる'ヘッダーの閉じるボタンの 'aria-label' の値
header-close-variant
文字列ヘッダーの閉じるボタンに適用するテキストテーマカラーバリアント
header-tag
v2.22.0+
文字列'header'フッターのデフォルトタグの代わりにレンダリングするHTMLタグを指定します
header-text-variant
文字列Bootstrapのテーマカラーバリアントの1つをヘッダーのテキストに適用します
hide-backdrop
真偽値falseモーダルの背景のレンダリングを無効にします
hide-footer
真偽値falseモーダルのフッターのレンダリングを無効にします
hide-header
真偽値falseモーダルのヘッダーのレンダリングを無効にします
hide-header-close
真偽値falseモーダルのヘッダーの閉じるボタンのレンダリングを無効にします
id
文字列レンダリングされたコンテンツに `id` 属性を設定するために使用され、必要に応じて追加の要素IDを生成するためのベースとして使用されます
ignore-enforce-focus-selector
v2.4.0+
Array または Stringフォーカス強制ルーチンから特定の要素を無視します。CSSセレクターで指定します
lazy
真偽値falseモーダルに `static` プロパティが設定されている場合、モーダルコンテンツを遅延レンダリングします
modal-class
Array または Object または String'.modal' ラッパー要素に適用する CSS クラス (またはクラス)
no-close-on-backdrop
真偽値false背景をクリックしてモーダルを閉じる機能を無効にします
no-close-on-esc
真偽値falseESCキーを押してモーダルを閉じる機能を無効にします
no-enforce-focus
真偽値falseモーダル内でフォーカスを維持するフォーカス強制ルーチンを無効にします
no-fade
真偽値false`true` に設定すると、コンポーネントのフェードアニメーション/トランジションを無効にします
no-stacking
真偽値false他のモーダルがこのモーダルに重ねて表示されるのを防ぎます
ok-disabled
真偽値falseデフォルトのフッターのOKボタンを無効状態にします
ok-only
真偽値falseデフォルトのフッターのキャンセルボタンのレンダリングを無効にします
ok-title
文字列'OK'デフォルトのフッターのOKボタンに配置するテキスト文字列
ok-title-html
注意して使用してください
文字列デフォルトのフッターのOKボタンに配置するHTML文字列
ok-variant
文字列'primary'デフォルトのフッターのOKボタンに適用するボタンの色のテーマバリアント
return-focus
HTMLElement または Object または Stringモーダルが閉じるときにフォーカスを戻すHTML要素参照、CSSセレクター、またはコンポーネント参照。設定されていない場合は、モーダルが開く前に最後にフォーカスがあった要素にフォーカスを戻します
scrollable
真偽値falseモーダルボディのスクロールを有効にします
size
文字列'md'モーダルの幅のサイズを設定します。 'sm'、'md' (デフォルト)、'lg'、または 'xl'
static
真偽値falseコンポーネントのコンテンツを、body要素に追加するためにポーティングするのではなく、DOM内のその場所にレンダリングします
title
文字列タイトルに配置するテキストコンテンツ
title-class
Array または Object または Stringタイトルに適用するCSSクラス(またはクラス)
title-html
注意して使用してください
文字列タイトルに配置する HTML 文字列コンテンツ
title-sr-only
真偽値falseタイトルを '.sr-only' ラッパーで囲みます
title-tag
文字列'h5'タイトルにデフォルトのタグの代わりにレンダリングする HTML タグを指定します
visible
v-model
真偽値falseモーダルの現在の表示状態

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

v-model

プロパティ
イベント
visiblechange

スロット

名前
スコープ付き
説明
default モーダル本体のコンテンツ。オプションでスコープ付き
modal-backdrop いいえモーダル背景のコンテンツ
modal-cancel いいえモーダル CANCEL ボタンのコンテンツ
modal-footer モーダルフッターのコンテンツ。デフォルトの OK および Cancel ボタンも削除します。オプションでスコープ付き
modal-header モーダルヘッダーコンテナ全体のコンテンツ。右上の X 閉じるボタンも削除します。オプションでスコープ付き
modal-header-close いいえモーダルヘッダーの閉じるボタンのコンテンツ。`modal-header` スロットが使用されている場合、このスロットは表示されません
modal-ok いいえモーダル OK ボタンのコンテンツ
modal-title モーダルのタイトル。`modal-header` スロットが使用されている場合、このスロットは表示されません。オプションでスコープ付き

イベント

イベント
(クリックして昇順にソート)
引数
説明
bv::modal::hidden
  1. bvModalEvent - BvModalEvent オブジェクト
  2. modalId - モーダル ID
モーダルが非表示になったときに `$root` で発行されます
bv::modal::hide
  1. bvModalEvent - BvModalEvent オブジェクト。非表示をキャンセルするには、`bvModalEvent.preventDefault()` を呼び出してください
  2. modalId - モーダル ID
モーダルが非表示になる直前に `$root` で発行されます。(モーダルが強制的に非表示にされていない限り)キャンセル可能です
bv::modal::show
  1. bvModalEvent - BvModalEvent オブジェクト。表示をキャンセルするには、`bvModalEvent.preventDefault()` を呼び出してください
  2. modalId - モーダル ID
モーダルが表示される直前に `$root` で発行されます。キャンセル可能です
bv::modal::shown
  1. bvModalEvent - BvModalEvent オブジェクト
  2. modalId - モーダル ID
モーダルが表示されたときに `$root` で発行されます
cancel
  1. bvModalEvent - BvModalEvent オブジェクト。非表示をキャンセルするには、`bvModalEvent.preventDefault()` を呼び出してください
デフォルトの CANCEL ボタンが押されたとき、モーダルが非表示になる直前に発行されます。キャンセル可能です
change
  1. isVisible - モーダルの表示状態。モーダルが表示されている場合は `true`、表示されていない場合は `false`
新しいモーダルの表示状態。v-model の更新に使用されます
close
  1. bvModalEvent - BvModalEvent オブジェクト。非表示をキャンセルするには、`bvModalEvent.preventDefault()` を呼び出してください
デフォルトのヘッダー閉じるボタンが押されたとき、モーダルが非表示になる直前に発行されます。キャンセル可能です
hidden
  1. bvModalEvent - BvModalEvent オブジェクト
モーダルが非表示になった後、常に発行されます
hide
  1. bvModalEvent - BvModalEvent オブジェクト。非表示をトリガーしたアクションを確認するには、`bvModalEvent.trigger` を調べてください。非表示をキャンセルするには、`bvModalEvent.preventDefault()` を呼び出してください
モーダルが非表示になる直前に常に発行されます。(モーダルが強制的に非表示にされていない限り)キャンセル可能です
ok
  1. bvModalEvent - BvModalEvent オブジェクト。非表示をキャンセルするには、`bvModalEvent.preventDefault()` を呼び出してください
デフォルトの OK ボタンが押されたとき、モーダルが非表示になる直前に発行されます。キャンセル可能です
show
  1. bvModalEvent - BvModalEvent オブジェクト。表示をキャンセルするには、`bvModalEvent.preventDefault()` を呼び出してください
モーダルが表示される直前に常に発行されます。キャンセル可能です
shown
  1. bvModalEvent - BvModalEvent オブジェクト
モーダルが表示されたときに常に発行されます

$root イベントリスナー

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

イベント
引数
説明
bv::hide::modal

modalId - 非表示にするモーダルの ID

このイベントが `root` で発行されたときに、指定された ID を持つモーダルを非表示にします
bv::show::modal

modalId - 表示するモーダル ID

elIDtoFocusOnClose - モーダルが閉じられた後にフォーカスを戻す要素参照または CSS セレクターを指定します(オプション)

このイベントが `$root` で発行されたときに、指定された ID を持つモーダルを表示します
bv::toggle::modal

modalId - 表示/非表示を切り替えるモーダルの ID

elIDtoFocusOnClose - モーダルが閉じられた後にフォーカスを戻す要素参照または CSS セレクターを指定します(オプション)

指定された ID のモーダルの表示/非表示を切り替えます

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

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

コンポーネント
名前付きエクスポート
インポートパス
<b-modal>BModalbootstrap-vue

import { BModal } from 'bootstrap-vue'
Vue.component('b-modal', BModal)

個々のディレクティブのインポート

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

ディレクティブ
名前付きエクスポート
インポートパス
v-b-modalVBModalbootstrap-vue

import { VBModal } from 'bootstrap-vue'
// Note: Vue automatically prefixes the directive name with 'v-'
Vue.directive('b-modal', VBModal)

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

このプラグインには、上記にリストされている個々のコンポーネントとディレクティブがすべて含まれています。プラグインにはコンポーネントのエイリアスも含まれます。

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

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

  • BVModalPlugin

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