コンポーネントエイリアス
<b-form-input>
は、次のエイリアスを介して使用することもできます
<b-input>
注: コンポーネントエイリアスは、BootstrapVue 全体をインポートするか、コンポーネントグループプラグインを使用する場合にのみ使用できます。
text
、password
、number
、url
、email
、search
、range
、date
など、さまざまなタイプの入力を作成します。
<template>
<div>
<b-form-input v-model="text" placeholder="Enter your name"></b-form-input>
<div class="mt-2">Value: {{ text }}</div>
</div>
</template>
<script>
export default {
data() {
return {
text: ''
}
}
}
</script>
<!-- b-form-input.vue -->
<b-form-input>
のデフォルトはtext
入力ですが、type
プロパティを、サポートされているネイティブブラウザのHTML5タイプ(text
、password
、email
、number
、url
、tel
、search
、date
、datetime
、datetime-local
、month
、week
、time
、range
、またはcolor
)のいずれかに設定できます。
<template>
<b-container fluid>
<b-row class="my-1" v-for="type in types" :key="type">
<b-col sm="3">
<label :for="`type-${type}`">Type <code>{{ type }}</code>:</label>
</b-col>
<b-col sm="9">
<b-form-input :id="`type-${type}`" :type="type"></b-form-input>
</b-col>
</b-row>
</b-container>
</template>
<script>
export default {
data() {
return {
types: [
'text',
'number',
'email',
'password',
'search',
'url',
'tel',
'date',
'time',
'range',
'color'
]
}
}
}
</script>
<!-- b-form-input-types.vue -->
type
プロパティがサポートされていない入力タイプ(上記参照)に設定されている場合、text
入力がレンダリングされ、コンソール警告が出力されます。
入力タイプの注意事項
text
入力タイプにフォールバックします(レンダリングされたtype
属性のマークアップには、リクエストされたタイプが表示されますが)。datetime
のサポートを失い、Operaはバージョン15で、SafariはiOS 7で失いました。datetime
を使用する代わりに、サポートが非推奨になっているため、date
とtime
を2つの別々の入力として使用してください。date
およびtime
入力はネイティブブラウザタイプであり、カスタムの日付/時刻ピッカーではありません。v-model.lazy
は、<b-form-input>
(またはカスタムVueコンポーネント)ではサポートされていません。lazy
プロパティを代わりに使用してください。v-model
修飾子.number
と.trim
は、ユーザーが入力しているときに予期しないカーソルのジャンプを引き起こす可能性があります(これは、カスタムコンポーネントでのv-model
に関するVueの問題です)。これらの修飾子の使用は避けてください。number
またはtrim
プロパティを代わりに使用してください。range
タイプの入力でreadonly
をサポートしていない可能性があります。min
、max
、およびstep
をサポートしない入力タイプ(text
、password
、tel
、email
、url
など)は、値が提供されていても、これらの値を無視します(ただし、それらは入力マークアップにレンダリングされます)。予測テキスト入力とIME構成入力に関する注意事項
v-model
は更新されません。自動提案された単語が選択されていない場合、v-modelは入力がフォーカスを失ったときに、入力の現在の表示テキストで更新されます。v-model
は更新されません。range
タイプの入力は、Bootstrap v4の.custom-range
クラスを使用してレンダリングされます。トラック(背景)とサム(値)は、ブラウザ間で同じように表示されるようにスタイル設定されています。
範囲入力には、それぞれ0
と100
のmin
とmax
の暗黙的な値があります。min
およびmax
プロパティを使用して、これらの新しい値を指定できます。
<template>
<div>
<label for="range-1">Example range with min and max</label>
<b-form-input id="range-1" v-model="value" type="range" min="0" max="5"></b-form-input>
<div class="mt-2">Value: {{ value }}</div>
</div>
</template>
<script>
export default {
data() {
return {
value: '2'
}
}
}
</script>
<!-- b-form-input-range.vue -->
デフォルトでは、範囲入力は整数値に「スナップ」します。これを変更するには、step
値を指定できます。以下の例では、step="0.5"を使用してステップ数を2倍にしています。
<template>
<div>
<label for="range-2">Example range with step value</label>
<b-form-input id="range-2" v-model="value" type="range" min="0" max="5" step="0.5"></b-form-input>
<div class="mt-2">Value: {{ value }}</div>
</div>
</template>
<script>
export default {
data() {
return {
value: '2'
}
}
}
</script>
<!-- b-form-input-range-step.vue -->
注:範囲入力は(すべての入力タイプと同様に)値を文字列として返します。Number(value)
、parseInt(value, 10)
、parseFloat(value)
を使用するか、number
プロパティを使用して、値をネイティブ数値に変換する必要がある場合があります。
注:Bootstrap v4 CSSには、入力グループ内の範囲入力のスタイル設定や、範囲入力での検証スタイル設定は含まれていません。ただし、BootstrapVueには、Bootstrap v4にスタイル設定が含まれるまで、これらの状況を処理するためのカスタムスタイル設定が含まれています。
高さを設定するには、size
プロパティをそれぞれsm
またはlg
に設定して、小または大にします。
幅を制御するには、入力を標準のBootstrapグリッド列内に配置します。
<b-container fluid>
<b-row class="my-1">
<b-col sm="2">
<label for="input-small">Small:</label>
</b-col>
<b-col sm="10">
<b-form-input id="input-small" size="sm" placeholder="Enter your name"></b-form-input>
</b-col>
</b-row>
<b-row class="my-1">
<b-col sm="2">
<label for="input-default">Default:</label>
</b-col>
<b-col sm="10">
<b-form-input id="input-default" placeholder="Enter your name"></b-form-input>
</b-col>
</b-row>
<b-row class="my-1">
<b-col sm="2">
<label for="input-large">Large:</label>
</b-col>
<b-col sm="10">
<b-form-input id="input-large" size="lg" placeholder="Enter your name"></b-form-input>
</b-col>
</b-row>
</b-container>
<!-- b-form-input-size.vue -->
注:入力タイプrange
は、<b-input-group>
内に配置され、そのsize
プロパティが設定されていない限り、現在コントロールのサイズ設定をサポートしていません。
注:ネイティブHTMLの<input>
属性のsize
(<input>
に水平幅を文字数で設定します)はサポートされていません。スタイル、ユーティリティクラス、またはレイアウト行(<b-row>
)と列(<b-col>
)を使用して、目的の幅を設定してください。
Bootstrapには、ほとんどのフォームコントロールのvalid
およびinvalid
状態の検証スタイルが含まれています。
一般的に言えば、特定の種類のフィードバックには特定の状態を使用する必要があります
false
(無効状態を示す)は、ブロックされた、または必須のフィールドがある場合に最適です。ユーザーはフォームを送信するために、このフィールドに適切に入力する必要があります。true
(有効状態を示す)は、フォーム全体でフィールドごとの検証を行い、残りのフィールドを通してユーザーを奨励したい場合に最適です。null
検証状態を表示しません(有効でも無効でもありません)<b-form-input>
にコンテキスト状態アイコンの1つを適用するには、state
プロパティをfalse
(無効の場合)、true
(有効の場合)、またはnull
(検証状態なし)に設定します。
<b-container fluid>
<b-row class="my-1">
<b-col sm="3">
<label for="input-none">No State:</label>
</b-col>
<b-col sm="9">
<b-form-input id="input-none" :state="null" placeholder="No validation"></b-form-input>
</b-col>
</b-row>
<b-row class="my-1">
<b-col sm="3">
<label for="input-valid">Valid State:</label>
</b-col>
<b-col sm="9">
<b-form-input id="input-valid" :state="true" placeholder="Valid input"></b-form-input>
</b-col>
</b-row>
<b-row class="my-1">
<b-col sm="3">
<label for="input-invalid">Invalid State:</label>
</b-col>
<b-col sm="9">
<b-form-input id="input-invalid" :state="false" placeholder="Invalid input"></b-form-input>
</b-col>
</b-row>
</b-container>
<!-- b-form-input-states.vue -->
ライブ例
<template>
<div role="group">
<label for="input-live">Name:</label>
<b-form-input
id="input-live"
v-model="name"
:state="nameState"
aria-describedby="input-live-help input-live-feedback"
placeholder="Enter your name"
trim
></b-form-input>
<!-- This will only be shown if the preceding input has an invalid state -->
<b-form-invalid-feedback id="input-live-feedback">
Enter at least 3 letters
</b-form-invalid-feedback>
<!-- This is a form text block (formerly known as help block) -->
<b-form-text id="input-live-help">Your full name.</b-form-text>
</div>
</template>
<script>
export default {
computed: {
nameState() {
return this.name.length > 2 ? true : false
}
},
data() {
return {
name: ''
}
}
}
</script>
<!-- b-form-input-states-feedback.vue -->
ヒント:上記のマークアップと同様のマークアップを自動的に生成するには、<b-form-group>
コンポーネントを使用します。
フォームコントロールの状態を示すためにこれらのコンテキスト状態を使用すると、視覚的な色ベースの表示のみが提供され、スクリーンリーダーなどの支援技術のユーザーや色覚異常のユーザーには伝わりません。
状態の代替表示も必ず提供してください。たとえば、フォームコントロールの<label>
テキスト自体に状態に関するヒントを含めるか、追加のヘルプテキストブロックを提供することができます。
aria-invalid
属性特に支援技術の場合、無効なフォームコントロールにaria-invalid="true"
属性を割り当てることもできます。
<b-form-input>
が無効なコンテキスト状態(つまり、state が false
)の場合、<b-form-input>
の prop aria-invalid
を true
に設定するか、サポートされている値のいずれかに設定することもできます。
false
: エラーが検出されていないことを示します(デフォルト)。true
(または 'true'
): 値が検証に失敗したことを示します。'grammar'
: 文法エラーが検出されたことを示します。'spelling'
: スペルミスが検出されたことを示します。aria-invalid
が明示的に設定されておらず、state
が false
に設定されている場合、入力の aria-invalid
属性は自動的に 'true'
に設定されます。
<b-form-input>
は、オプションで formatter
prop に関数参照を渡すことで、フォーマットをサポートします。
フォーマット(フォーマッタ関数が指定されている場合)は、コントロールのネイティブ input
および change
イベントが発生したときに実行されます。ブール値の prop lazy-formatter
を使用すると、フォーマッタ関数をコントロールのネイティブ blur
イベントで呼び出すように制限できます。
formatter
関数は、入力要素の生の value
と、フォーマットをトリガーしたネイティブ event
オブジェクト(利用可能な場合)の 2 つの引数を受け取ります。
formatter
関数は、フォーマットされた値を文字列として返す必要があります。
formatter
が提供されていない場合、フォーマットは実行されません。
<template>
<div>
<b-form-group
label="Text input with formatter (on input)"
label-for="input-formatter"
description="We will convert your name to lowercase instantly"
class="mb-0"
>
<b-form-input
id="input-formatter"
v-model="text1"
placeholder="Enter your name"
:formatter="formatter"
></b-form-input>
</b-form-group>
<p><b>Value:</b> {{ text1 }}</p>
<b-form-group
label="Text input with lazy formatter (on blur)"
label-for="input-lazy"
description="This one is a little lazy!"
class="mb-0"
>
<b-form-input
id="input-lazy"
v-model="text2"
placeholder="Enter your name"
lazy-formatter
:formatter="formatter"
></b-form-input>
</b-form-group>
<p class="mb-0"><b>Value:</b> {{ text2 }}</p>
</div>
</template>
<script>
export default {
data() {
return {
text1: '',
text2: ''
}
},
methods: {
formatter(value) {
return value.toLowerCase()
}
}
}
</script>
<!-- b-form-input-formatter.vue -->
注意: テキストのような入力(color
、range
、date
、number
、email
など)以外の入力を使用する場合は、フォーマッタ関数が入力タイプに対して予期される形式(date
-> '2000-06-01'、color
-> '#ff0000' など)で値を返すようにしてください。フォーマッタは値を文字列として返す必要があります。
注意: レイジーフォーマットを使用していない場合、カーソルが入力値の末尾にない場合、文字が入力された後にカーソルが末尾にジャンプすることがあります。提供されたイベントオブジェクトと event.target
を使用して、ネイティブ入力の選択メソッドとプロパティにアクセスして、挿入ポイントを制御できます。これは読者の練習問題として残されています。
フォームで <b-form-input readonly>
要素をプレーンテキストとしてスタイルしたい場合は、plaintext
prop を設定します(readonly
を設定する必要はありません)。これにより、デフォルトのフォームフィールドのスタイルが削除され、正しいマージンとパディングが保持されます。
plaintext
オプションは、入力タイプ color
または range
ではサポートされていません。
一部のブラウザでは、数値のような入力にフォーカスがある状態でマウスホイールをスクロールすると、入力値が増減します。このブラウザの機能を無効にするには、no-wheel
prop を true
に設定するだけです。
データリストは、<option>
タグのリストを含むネイティブ HTML タグ <datalist>
です。ID をデータリストタグに割り当てることで、list
属性を追加することで、テキスト入力からリストを参照できます。
これにより、入力はコンボボックスまたはオートコンプリートの動作になり、既存の値を選択したり、新しい値を入力したりできます。
<template>
<div>
<b-form-input list="my-list-id"></b-form-input>
<datalist id="my-list-id">
<option>Manual Option</option>
<option v-for="size in sizes">{{ size }}</option>
</datalist>
</div>
</template>
<script>
export default {
data() {
return {
sizes: ['Small', 'Medium', 'Large', 'Extra Large']
}
}
}
</script>
<!-- b-form-input-datalist.vue -->
BootstrapVue は、オプションの配列から <datalist>
をすばやく作成するためのフォームヘルパーコンポーネント <b-form-datalist>
を提供しています。
注意
<b-form-input>
で autocomplete="off"
を設定します。password
、range
、または color
の入力フィールドには適用できません。<datalist>
を完全にサポートしているわけではなく、実装にバグがある可能性があります。データリストは拡張機能として扱い、現時点では依存しないことをお勧めします。すべてのブラウザでの完全なサポートの詳細については、Can I use を確認してください。v-model
修飾子Vue は、カスタムコンポーネントベースの入力の v-model
で .lazy
、.trim
、および .number
修飾子を公式にサポートしておらず、悪いユーザーエクスペリエンスを生み出す可能性があります。Vue のネイティブ修飾子の使用は避けてください。
この問題を回避するために、<b-form-input>
には、ネイティブ Vue v-model
修飾子 .trim
と .number
および .lazy
をエミュレートする 3 つのブール値 prop trim
、number
、および lazy
があります。lazy
prop は、change
/blur
イベントで v-model を更新します。
注意
number
prop は trim
prop より優先されます(つまり、number
が設定されている場合、trim
は効果がありません)。number
prop を使用しているときに、値が数値として解析できる場合(parseFloat
経由)、型 Number
の値を v-model
に返し、それ以外の場合は元の入力値が型 String
として返されます。これは、ネイティブの .number
修飾子と同じ動作です。trim
および number
修飾子の prop は、input
または change
イベントによって返される値に影響を与えません。これらのイベントは常に、オプションのフォーマット(修飾子を処理する v-model
update
イベントによって返される値とは一致しない場合があります)の後に、<textarea>
のコンテンツの文字列値を返します。lazy
修飾子 prop の代替として、<b-form-input>
は、オプションでユーザー入力をデバウンスし、ユーザーが最後に文字を入力した(または change
イベントが発生した)後、一定のアイドル時間後に v-model
を更新することをサポートしています。ユーザーがアイドルタイムアウトが期限切れになる前に新しい文字を入力(または文字を削除)すると、タイムアウトが再開されます。
デバウンスを有効にするには、prop debounce
をゼロより大きい任意の整数に設定します。値はミリ秒単位で指定されます。debounce
を 0
に設定すると、デバウンスが無効になります。
注意: lazy
prop が設定されている場合、デバウンスは発生しません。
<template>
<div>
<b-form-input v-model="value" type="text" debounce="500"></b-form-input>
<div class="mt-2">Value: "{{ value }}"</div>
</div>
</template>
<script>
export default {
data() {
return {
value: ''
}
}
}
</script>
<!-- b-form-input-debounce.vue -->
autofocus
prop が設定されている場合、入力はドキュメントに挿入(つまり、マウント)されたとき、または Vue <keep-alive>
コンポーネント内にあるときに再アクティブ化されたときに、自動的にフォーカスされます。この prop は、入力に autofocus
属性を設定するものではなく、入力がいつ表示されるかを判断することもできないことに注意してください。
すべてのネイティブイベント(カスタムの input
および change
イベント以外)は、.native
修飾子を必要とせずにサポートされています。
カスタムの input
および change
イベントは、現在の value
(フォーマットが適用された後)の単一の引数を受け取り、ユーザーの操作によってトリガーされます。
カスタムの update
イベントは、入力値が渡され、v-model
を更新する必要があるたびに(必要に応じて、input
、change
、および blur
の前に)発行されます。
.native
修飾子を使用することで、常にネイティブの input
および change
イベントにアクセスできます。
<b-form-input>
は、コンポーネント参照(つまり、ref
を <b-form-input ref="foo" ...>
に割り当て、this.$refs['foo'].propertyName
または this.$refs['foo'].methodName(...)
を使用する)で、ネイティブの input 要素のプロパティとメソッドのいくつかを公開します。
プロパティ | 注意 |
---|---|
.selectionStart | 読み取り/書き込み |
.selectionEnd | 読み取り/書き込み |
.selectionDirection | 読み取り/書き込み |
.validity | 読み取り専用 |
.validationMessage | 読み取り専用 |
.willValidate | 読み取り専用 |
メソッド | 注意 |
---|---|
.focus() | 入力にフォーカスを当てます |
.blur() | 入力からフォーカスを外します |
.select() | 入力内のすべてのテキストを選択します |
.setSelectionRange() | |
.setRangeText() | |
.setCustomValidity() | |
.checkValidity() | |
.reportValidity() |
これらのメソッドとプロパティの詳細については、https://developer.mozilla.org/en-US/docs/Web/API/HTMLInputElement を参照してください。サポートは入力タイプによって異なります。
<input>
を代替として使用する基本的な Bootstrap スタイルを持つ単純な入力が必要な場合は、以下を使用するだけで済みます。
<template>
<div>
<input v-model="value" type="text" class="form-control">
<br>
<p>Value: "{{ value }}"</p>
</div>
</template>
<script>
export default {
data() {
return {
value: ''
}
}
}
</script>
<!-- native-input.vue -->
<b-form-input>
は、次のエイリアスを介して使用することもできます
<b-input>
注: コンポーネントエイリアスは、BootstrapVue 全体をインポートするか、コンポーネントグループプラグインを使用する場合にのみ使用できます。
すべてのプロパティのデフォルト値はグローバルに構成可能です。
プロパティ (クリックすると昇順にソートされます) | タイプ (クリックすると昇順にソートされます) | デフォルト | 説明 |
---|---|---|---|
aria-invalid | Boolean または String | false | 指定された値で 'aria-invalid' 属性を設定します |
autocomplete | String | フォームコントロールの 'autocomplete' 属性値を設定します | |
autofocus | Boolean | false | `true` に設定すると、マウント時、または keep-alive の場合に再アクティブ化されたときに、コントロールに自動フォーカスを当てようとします。コントロールに `autofocus` 属性を設定しません |
debounce v2.1.0+ | Number または String | 0 | ゼロより大きいミリ秒数に設定すると、ユーザー入力をデバウンスします。プロパティ 'lazy' が設定されている場合は効果がありません |
disabled | Boolean | false | `true` に設定すると、コンポーネントの機能が無効になり、無効状態になります |
form | String | フォームコントロールが属するフォームの ID。コントロールの `form` 属性を設定します | |
formatter | Function | 入力のフォーマット用の関数への参照 | |
id | String | レンダリングされたコンテンツに `id` 属性を設定するために使用され、必要に応じて追加の要素 ID を生成するためのベースとして使用されます | |
lazy v2.1.0+ | Boolean | false | 設定すると、'input' の代わりに 'change'/'blur' イベントで v-model を更新します。Vue の '.lazy' v-model 修飾子をエミュレートします |
lazy-formatter | Boolean | false | 設定すると、入力は(フォーマッタが指定されている場合)キーストロークごとではなく、フォーカスが外れたときにフォーマットされます |
list | String | 関連付けられた datalist 要素またはコンポーネントの ID | |
max | Number または String | 入力の 'max' 属性に設定する値。数値のような入力で使用されます | |
min | Number または String | 入力の 'min' 属性に設定する値。数値のような入力で使用されます | |
name | String | フォームコントロールの `name` 属性の値を設定します | |
no-wheel | Boolean | false | 数値のような入力の場合、マウスホイールによる値の増減を無効にします |
number | Boolean | false | 設定すると、入力値をネイティブの数値に変換しようとします。Vue の '.number' v-model 修飾子をエミュレートします |
placeholder | String | フォームコントロールの `placeholder` 属性値を設定します | |
plaintext | Boolean | false | フォームコントロールを読み取り専用に設定し、コントロールをプレーンテキストのように表示します(境界線なし) |
readonly | Boolean | false | フォームコントロールの `readonly` 属性を設定します |
required | Boolean | false | フォームコントロールに `required` 属性を追加します |
size | String | コンポーネントの外観のサイズを設定します。 'sm'、'md'(デフォルト)、または 'lg' | |
state | Boolean | null | コンポーネントの検証状態の外観を制御します。 `true` は有効、`false` は無効、`null` は検証状態なし |
step | Number または String | 入力の 'step' 属性に設定する値。数値のような入力で使用されます | |
trim | Boolean | false | 設定すると、入力値の先頭と末尾の空白を削除します。Vue の '.trim' v-model 修飾子をエミュレートします |
type | String | 'text' | レンダリングする入力のタイプ。サポートされているタイプのドキュメントを参照してください |
value v-model | Number または String | '' | 入力の現在の値。結果は、`number` プロップを使用する場合を除き、常に文字列になります |
v-model
プロパティ | イベント |
---|---|
value | update |
イベント | 引数 | 説明 |
---|---|---|
blur |
| 入力からフォーカスが外れた後に発生します |
change |
| ユーザーの操作によってトリガーされる change イベント。フォーマット後 ( 'trim' または 'number' プロップは含まない) および v-model が更新された後に発生します |
input |
| ユーザーの操作によってトリガーされる入力イベント。フォーマット後 ( 'trim' または 'number' プロップは含まない) および v-model が更新された後に発生します |
update |
| v-model を更新するために発生します |
次の名前付きエクスポートを使用して、個々のコンポーネントをプロジェクトにインポートできます
コンポーネント | 名前付きエクスポート | インポートパス |
---|---|---|
<b-form-input> | BFormInput | bootstrap-vue |
例
import { BFormInput } from 'bootstrap-vue' Vue.component('b-form-input', BFormInput)
このプラグインには、上記にリストされた個々のコンポーネントがすべて含まれていますプラグインには、コンポーネントエイリアスも含まれています。
名前付きエクスポート | インポートパス |
---|---|
FormInputPlugin | bootstrap-vue |
例
import { FormInputPlugin } from 'bootstrap-vue' Vue.use(FormInputPlugin)