フォーム

BootstrapVueのフォームコンポーネントと、必要に応じてインラインフォームスタイルと検証状態をサポートするヘルパーコンポーネント。他のBootstrapVueフォームコントロールコンポーネントと組み合わせて、カスタマイズされた、応答性の高いレイアウトを、一貫したルックアンドフィールで簡単に実現できます。

フォームとコントロールの概要

すべての入力には、適切なtype(例:メールアドレスの場合はemail、数値情報の場合はnumber)を使用し、メール検証、数値選択などの新しい入力コントロールを利用するようにしてください。

BootstrapVueのフォームスタイルを示す簡単な例を次に示します。サポートされているコンポーネント、フォームレイアウトなどのドキュメントについては、以下をお読みください。

<template>
  <div>
    <b-form @submit="onSubmit" @reset="onReset" v-if="show">
      <b-form-group
        id="input-group-1"
        label="Email address:"
        label-for="input-1"
        description="We'll never share your email with anyone else."
      >
        <b-form-input
          id="input-1"
          v-model="form.email"
          type="email"
          placeholder="Enter email"
          required
        ></b-form-input>
      </b-form-group>

      <b-form-group id="input-group-2" label="Your Name:" label-for="input-2">
        <b-form-input
          id="input-2"
          v-model="form.name"
          placeholder="Enter name"
          required
        ></b-form-input>
      </b-form-group>

      <b-form-group id="input-group-3" label="Food:" label-for="input-3">
        <b-form-select
          id="input-3"
          v-model="form.food"
          :options="foods"
          required
        ></b-form-select>
      </b-form-group>

      <b-form-group id="input-group-4" v-slot="{ ariaDescribedby }">
        <b-form-checkbox-group
          v-model="form.checked"
          id="checkboxes-4"
          :aria-describedby="ariaDescribedby"
        >
          <b-form-checkbox value="me">Check me out</b-form-checkbox>
          <b-form-checkbox value="that">Check that out</b-form-checkbox>
        </b-form-checkbox-group>
      </b-form-group>

      <b-button type="submit" variant="primary">Submit</b-button>
      <b-button type="reset" variant="danger">Reset</b-button>
    </b-form>
    <b-card class="mt-3" header="Form Data Result">
      <pre class="m-0">{{ form }}</pre>
    </b-card>
  </div>
</template>

<script>
  export default {
    data() {
      return {
        form: {
          email: '',
          name: '',
          food: null,
          checked: []
        },
        foods: [{ text: 'Select One', value: null }, 'Carrots', 'Beans', 'Tomatoes', 'Corn'],
        show: true
      }
    },
    methods: {
      onSubmit(event) {
        event.preventDefault()
        alert(JSON.stringify(this.form))
      },
      onReset(event) {
        event.preventDefault()
        // Reset our form values
        this.form.email = ''
        this.form.name = ''
        this.form.food = null
        this.form.checked = []
        // Trick to reset/clear native browser form validation state
        this.show = false
        this.$nextTick(() => {
          this.show = true
        })
      }
    }
  }
</script>

<!-- b-form.vue -->

インラインフォーム

<b-form>inlineプロパティを使用すると、一連のラベル、フォームコントロール、およびボタンを1つの水平行に表示できます。インラインフォーム内のフォームコントロールは、デフォルトの状態とは若干異なります。

  • コントロールはdisplay: flexで、HTMLの空白を折りたたみ、スペーシングおよびフレックスボックスユーティリティを使用して配置制御を行うことができます。
  • コントロールと入力グループは、Bootstrapのデフォルト幅である幅:100%を上書きするためにwidth: autoを受け取ります。
  • コントロールは、モバイルデバイスの狭いビューポートを考慮して、幅が少なくとも576pxのビューポートでのみインライン表示されます

個々のフォームコントロールの幅と配置は、スペーシングユーティリティを使用して手動で処理する必要がある場合があります(下記参照)。最後に、フォームコントロールごとに常に<label>を含めるようにしてください。クラス.sr-onlyを使用してスクリーンリーダー以外の訪問者から非表示にする必要がある場合でも同様です。

<div>
  <b-form inline>
    <label class="sr-only" for="inline-form-input-name">Name</label>
    <b-form-input
      id="inline-form-input-name"
      class="mb-2 mr-sm-2 mb-sm-0"
      placeholder="Jane Doe"
    ></b-form-input>

    <label class="sr-only" for="inline-form-input-username">Username</label>
    <b-input-group prepend="@" class="mb-2 mr-sm-2 mb-sm-0">
      <b-form-input id="inline-form-input-username" placeholder="Username"></b-form-input>
    </b-input-group>

    <b-form-checkbox class="mb-2 mr-sm-2 mb-sm-0">Remember me</b-form-checkbox>

    <b-button variant="primary">Save</b-button>
  </b-form>
</div>

<!-- b-form-inline.vue -->

カスタムフォームコントロールとセレクトもサポートされています。

<div>
  <b-form inline>
    <label class="mr-sm-2" for="inline-form-custom-select-pref">Preference</label>
    <b-form-select
      id="inline-form-custom-select-pref"
      class="mb-2 mr-sm-2 mb-sm-0"
      :options="[{ text: 'Choose...', value: null }, 'One', 'Two', 'Three']"
      :value="null"
    ></b-form-select>

    <b-form-checkbox class="mb-2 mr-sm-2 mb-sm-0">Remember my preference</b-form-checkbox>

    <b-button variant="primary">Save</b-button>
  </b-form>
</div>

<!-- b-form-inline-custom.vue -->

注:<b-form-group>は、レイアウトの競合により、inlineフォームではサポートされていません。

隠しラベルの代替

すべての入力にラベルを含めないと、スクリーンリーダーなどの支援技術はフォームで問題が発生します。これらのインラインフォームでは、.sr-onlyクラスを使用してラベルを非表示にできます。支援技術にラベルを提供するための代替メソッドは、aria-labelaria-labelledbyまたはtitle属性などです。これらのいずれも存在しない場合、支援技術は、存在する場合はplaceholder属性の使用に頼ることがありますが、他のラベル付けメソッドの代わりとしてplaceholderを使用することは推奨されないことに注意してください。

以下も参照してください

フォームヘルパーコンポーネント

Formプラグインでは、次のヘルパーコンポーネントを使用できます

  • <b-form-text> 入力のヘルプテキストブロック
  • <b-form-invalid-feedback> 入力invalid状態の無効なフィードバックテキストブロック
  • <b-form-valid-feedback> 入力valid状態の有効なフィードバックテキストブロック
  • <b-form-datalist> <b-form-input>またはプレーンな<input>で使用する<datalist>を簡単に作成

フォームテキストヘルパー

<b-form-text>ヘルパーコンポーネントを使用して、入力の下にヘルプテキストのブロックを表示します。テキストは、ミュートされた色とわずかに小さいフォントサイズで表示されます。

ヒント:ヘルプテキストは、aria-describedby属性を使用して、関連するフォームコントロールに明示的に関連付ける必要があります。これにより、スクリーンリーダーなどの支援技術は、ユーザーがコントロールにフォーカスするか入力すると、このヘルプテキストをアナウンスします。

<div>
  <b-form @submit.stop.prevent>
    <label for="text-password">Password</label>
    <b-form-input type="password" id="text-password" aria-describedby="password-help-block"></b-form-input>
    <b-form-text id="password-help-block">
      Your password must be 8-20 characters long, contain letters and numbers, and must not
      contain spaces, special characters, or emoji.
    </b-form-text>
   </b-form>
</div>

<!-- b-form-help-text.vue -->

フィードバックヘルパー

<b-form-valid-feedback>および<b-form-invalid-feedback>ヘルパーコンポーネントは、色付きのテキストのブロックとしてフィードバック(入力状態に基づく)を表示します。これらは入力(兄弟)の後に配置され、入力のブラウザネイティブ検証状態に基づいて表示されます。強制的に表示するには、プロパティforce-showtrueに設定するか、コントロールのstateをフィードバックヘルパーのstateプロパティにバインドするか、親要素(フォームなど)にwas-validatedクラスを設定します。詳細については、以下の検証セクションを参照してください。

オプションのブールプロパティtooltipを使用すると、表示をブロックから静的なツールチップスタイルに変更できます。フィードバックは通常、フォームコントロールの下に表示されます。このモードを有効にする場合は、親コンテナーにposition: relative: cssスタイル(またはposition-relativeクラス)が必要です。ツールチップスタイルのフィードバックは、その位置が静的であるため、他の入力、ラベルなどを不明瞭にする場合があることに注意してください。

注:<b-form-radio><b-form-checkbox><b-form-file>などの一部のフォームコントロールには、フィードバックテキストが自動的に表示されないようにするラッパー要素があります(フィードバックコンポーネントがフォームコントロールの入力の直接の兄弟ではないため)。フィードバックコンポーネントのstateプロパティ(フォームコントロールの状態にバインドされている)またはforce-showプロパティを使用して、フィードバックを表示します。

<template>
  <div>
    <b-form  @submit.stop.prevent>
      <label for="feedback-user">User ID</label>
      <b-form-input v-model="userId" :state="validation" id="feedback-user"></b-form-input>
      <b-form-invalid-feedback :state="validation">
        Your user ID must be 5-12 characters long.
      </b-form-invalid-feedback>
      <b-form-valid-feedback :state="validation">
        Looks Good.
      </b-form-valid-feedback>
     </b-form>
  </div>
</template>

<script>
  export default {
    data() {
      return {
        userId: ''
      }
    },
    computed: {
      validation() {
        return this.userId.length > 4 && this.userId.length < 13
      }
    }
  }
</script>

<!-- b-form-feedback-example.vue -->

データリストヘルパー

<datalist>要素をサポートするブラウザーの場合、<b-form-datalist>ヘルパーコンポーネントを使用すると、optionsプロパティに渡された配列を介して、<datalist>および子<option>要素をすばやく作成できます。

また、<b-form-datalist>内に<option>要素を手動で提供することもできます。これらは、optionsプロパティから生成された<option>要素の下に表示されます。

<template>
  <div>
    <label for="input-with-list">Input with datalist</label>
    <b-form-input list="input-list" id="input-with-list"></b-form-input>
    <b-form-datalist id="input-list" :options="options"></b-form-datalist>
  </div>
</template>

<script>
export default {
  data() {
    return {
      options: ['Apple', 'Banana', 'Grape', 'Kiwi', 'Orange']
    }
  }
}
</script>

<!-- b-form-datalist-example.vue -->

<b-form-datalist>は、<b-datalist>の短いエイリアスでも使用できます。

以下も参照してください

バリデーション

<b-form>novalidateプロパティをtrueに設定することで、ブラウザのネイティブなHTML5バリデーションを無効にできます。

<b-form>validatedプロパティをtrueに設定すると、Bootstrap v4の.was-validatedクラスがフォームに追加され、バリデーション状態がトリガーされます。

すべてのフォームコントロールは、stateプロパティをサポートしており、これを使用してフォームコントロールを3つのコンテキスト状態のいずれかに設定できます。

  • false (無効状態を示す) は、必須フィールドまたはブロックしているフィールドがある場合に最適です。ユーザーはフォームを送信するために、このフィールドを正しく入力する必要があります。
  • true (有効状態を示す) は、フォーム全体でフィールドごとのバリデーションがあり、残りのフィールドを通してユーザーを促したい場合に最適です。
  • null バリデーション状態を表示しません (有効でも無効でもない)。

新しいBootstrap v4バリデーション状態の詳細については、Bootstrap v4フォームバリデーションドキュメントを参照してください。

バリデーションメカニズム

BootstrapVueでサードパーティのVueベースのバリデーションライブラリを使用する

追加リソース

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

プロパティ

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

プロパティ
デフォルト
説明
id
Stringレンダリングされたコンテンツに`id`属性を設定するために使用され、必要に応じて追加の要素IDを生成するためのベースとして使用されます。
inline
Booleanfalse設定すると、フォームはインラインモードになり、ラベル、フォームコントロール、およびボタンが単一の水平行に表示されます。
novalidate
Booleanfalse設定すると、フォーム内のコントロールでブラウザのネイティブなHTML5バリデーションが無効になります。
validated
Booleanfalse設定すると、フォームにBootstrapクラス'was-validated'が追加され、ネイティブのブラウザバリデーション状態がトリガーされます。

スロット

名前
説明
default フォーム内に配置するコンテンツ

イベント

イベント
引数
説明
submit
  1. event - ネイティブのsubmitイベント
フォームが送信されているときに発生します。

プロパティ

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

プロパティ
デフォルト
説明
id
Stringレンダリングされたコンテンツに`id`属性を設定するために使用され、必要に応じて追加の要素IDを生成するためのベースとして使用されます。
inline
Booleanfalse設定すると、ヘルプテキストがブロック要素ではなく、インライン要素としてレンダリングされます。
tag
String'small'デフォルトのタグの代わりにレンダリングするHTMLタグを指定します。
text-variant
String'muted'Bootstrapテーマのカラーバリアントの1つをテキストに適用します。

スロット

名前
説明
default フォームテキスト内に配置するコンテンツ

<b-form-invalid-feedback>

関数型コンポーネント

プロパティ

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

プロパティ
デフォルト
説明
aria-live
Stringレンダリングされた要素が`aria-live`リージョン(スクリーンリーダーユーザー向け)である場合、'polite'または'assertive'のいずれかに設定します。
force-show
Booleanfalse'state'プロパティの値に関係なく、フィードバックテキストを表示します。
id
Stringレンダリングされたコンテンツに`id`属性を設定するために使用され、必要に応じて追加の要素IDを生成するためのベースとして使用されます。
role
StringARIA属性`role`を特定の値を設定します。
state
Booleannull明示的に'false'の場合、フィードバックを強制的に表示します。
tag
String'div'デフォルトのタグの代わりにレンダリングするHTMLタグを指定します。
tooltip
Booleanfalseフィードバックテキストを基本的なツールチップスタイルでレンダリングします。

スロット

名前
説明
default フォームの無効なフィードバック内に配置するコンテンツ

<b-form-valid-feedback>

関数型コンポーネント

プロパティ

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

プロパティ
デフォルト
説明
aria-live
Stringレンダリングされた要素が`aria-live`リージョン(スクリーンリーダーユーザー向け)である場合、'polite'または'assertive'のいずれかに設定します。
force-show
Booleanfalse'state'プロパティの値に関係なく、フィードバックテキストを表示します。
id
Stringレンダリングされたコンテンツに`id`属性を設定するために使用され、必要に応じて追加の要素IDを生成するためのベースとして使用されます。
role
StringARIA属性`role`を特定の値を設定します。
state
Booleannull明示的に'true'の場合、フィードバックを強制的に表示します。
tag
String'div'デフォルトのタグの代わりにレンダリングするHTMLタグを指定します。
tooltip
Booleanfalseフィードバックテキストを基本的なツールチップスタイルでレンダリングします。

スロット

名前
説明
default フォームの有効なフィードバック要素に配置するコンテンツ

<b-form-datalist>

コンポーネントエイリアス

<b-form-datalist>は、次のエイリアスを介して使用することもできます。

  • <b-datalist>

注: コンポーネントエイリアスは、BootstrapVueのすべてをインポートする場合、またはコンポーネントグループプラグインを使用する場合にのみ使用できます。

プロパティ

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

プロパティ
デフォルト
説明
disabled-field
String'disabled'`options`配列で、disabled状態に使用する必要があるフィールド名
html-field
注意して使用してください
String'html'`options`配列で、テキストフィールドではなくHTMLラベルに使用する必要があるフィールド名
id
必須
Stringレンダリングされたコンテンツに`id`属性を設定するために使用され、必要に応じて追加の要素IDを生成するためのベースとして使用されます。
options
Array または Object[]コンポーネントでレンダリングする項目の配列
text-field
String'text'`options`配列で、テキストラベルに使用する必要があるフィールド名
value-field
String'value'`options`配列で、値に使用する必要があるフィールド名

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

スロット

名前
説明
default フォームのデータリストに配置するコンテンツ

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

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

コンポーネント
名前付きエクスポート
インポートパス
<b-form>BFormbootstrap-vue
<b-form-text>BFormTextbootstrap-vue
<b-form-invalid-feedback>BFormInvalidFeedbackbootstrap-vue
<b-form-valid-feedback>BFormValidFeedbackbootstrap-vue
<b-form-datalist>BFormDatalistbootstrap-vue

import { BForm } from 'bootstrap-vue'
Vue.component('b-form', BForm)

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

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

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

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