コンポーネントエイリアス
<b-form-file>
は、次のエイリアスを使用して使用することもできます
<b-file>
注:コンポーネントエイリアスは、BootstrapVue のすべてをインポートするか、コンポーネントグループプラグインを使用する場合にのみ使用できます。
カスタマイズ可能で、クロスブラウザ対応の一貫性のあるファイル入力コントロール。単一ファイル、複数ファイル、およびディレクトリアップロード(ディレクトリモードをサポートするブラウザの場合)をサポートします。
<template>
<div>
<!-- Styled -->
<b-form-file
v-model="file1"
:state="Boolean(file1)"
placeholder="Choose a file or drop it here..."
drop-placeholder="Drop file here..."
></b-form-file>
<div class="mt-3">Selected file: {{ file1 ? file1.name : '' }}</div>
<!-- Plain mode -->
<b-form-file v-model="file2" class="mt-3" plain></b-form-file>
<div class="mt-3">Selected file: {{ file2 ? file2.name : '' }}</div>
</div>
</template>
<script>
export default {
data() {
return {
file1: null,
file2: null
}
}
}
</script>
<!-- b-form-file.vue -->
クロスブラウザの一貫性を保つため、<b-form-file> はデフォルトで、ブラウザのデフォルトのファイル入力をBootstrapカスタムファイル入力に置き換えます。これらは、セマンティックでアクセシブルなマークアップ上に構築されているため、デフォルトのファイル入力の確実な代替手段となります。
単一ファイルモードでは、ファイルが選択されていない場合、またはユーザーが「参照」ダイアログをキャンセルした場合、v-model は null になり、ファイルが選択されていないことを示します。ファイルが選択されると、戻り値は JavaScript の File オブジェクトインスタンスになります。
複数ファイルのアップロードは、コンポーネントに multiple プロパティを追加することでサポートされます。この場合、v-model は常に配列です。ファイルが選択されていない場合は、空の配列が返されます。1つ以上のファイルが選択されると、戻り値は JavaScript の File オブジェクトインスタンスの配列になります。
**注意:**ディレクトリモードは非標準の機能です。すべての最新のブラウザでサポートされていますが、本番環境では頼りにするべきではありません。詳細については、MDNおよびCan I useをご覧ください。
directory プロパティを追加することにより、ユーザーはファイルの代わりにディレクトリを選択できます。ディレクトリが選択されると、ディレクトリとそのコンテンツの階層全体が、選択された項目のセットに含まれます。
ディレクトリモードでは、ファイルはデフォルトでネストされた配列形式で返されます。例:
dirA/ - fileA1 - fileA2 - dirB/ - fileB1 - dirC/ - fileC1 - fileC2 dirD/ - fileD1
は、次のように返されます(または、ファイル/ディレクトリの順序が異なる場合があります)。
[[fileA1, fileA2, [fileB1], [fileC1, fileC2]], [fileD1]]
no-traverse プロパティを設定すると、配列はフラット化されます
[fileA1, fileA2, fileB1, fileC1, fileC2, fileD1]
各ファイルエントリには、各ファイルの相対パスを含む特別な $path プロパティがあります。ネストされたディレクトリ構造の場合、BootstrapVueは独自のルーチンを使用して相対パスを決定します。そうでない場合は、File.webkitRelativePathに依存します。
ディレクトリモードは、ファイル入力が**ほとんどの**最新のブラウザでプレーンモードの場合にもサポートされます。
ドロップモードはデフォルトで有効になっています。 no-drop プロパティを設定することで無効にすることができます。 no-drop は、プレーンモードでは効果がありません(一部のブラウザは、プレーン入力ファイルへのファイルのドロップをサポートしています)。
オプションで、drop-placeholder プロパティまたはスコープ付き drop-placeholder スロットを介してドラッグ中に別のプレースホルダーを設定できます。プロパティはプレーンテキストのみをサポートします。カスタムHTMLマークアップにはスロットを使用してください。スロットはプロパティよりも優先されます。 drop-placeholder プロパティ/スロットは、no-drop が設定されている場合、またはプレーンモードの場合は効果がありません。
ネイティブブラウザの制約( required など)は、非表示のファイル入力がドラッグアンドドロップ機能を処理せず、選択されたファイルがゼロになるため、ドロップモードでは機能しないことに注意してください。
許可されるファイルタイプを含む文字列に accept プロパティを設定することで、ファイルタイプを制限できます。複数のタイプを指定するには、値をコンマで区切ります。
<div>
<!-- Accept all image formats by IANA media type wildcard-->
<b-form-file accept="image/*"></b-form-file>
<!-- Accept specific image formats by IANA type -->
<b-form-file accept="image/jpeg, image/png, image/gif"></b-form-file>
<!-- Accept specific image formats by extension -->
<b-form-file accept=".jpg, .png, .gif"></b-form-file>
</div>
すべてのファイルタイプを受け入れるには、 accept を null (デフォルト)のままにします。IANAメディアタイプと拡張子を混在させて使用できます。
標準メディアタイプの完全なリストについては、IANAメディアタイプを参照してください。
**注意:**すべてのブラウザがファイル入力の accept 属性をサポートまたは尊重しているわけではありません。
ドラッグアンドドロップの場合、BootstrapVueは内部ファイルタイプチェックルーチンを使用し、正しいIANAメディアタイプまたは拡張子を持たないファイルをフィルタリングします。
<b-form-file> は、プレーンモードでない場合、その外観をカスタマイズするためのいくつかの機能を提供します。
size プロパティを使用して、入力の視覚的なサイズを制御します。デフォルトサイズは md (中)と見なされます。オプションのサイズは lg (大)と sm (小)です。これらのサイズは、他のフォームコントロールで使用可能なサイズと一致します。
<div>
<b-form-group label="Small:" label-cols-sm="2" label-size="sm">
<b-form-file id="file-small" size="sm"></b-form-file>
</b-form-group>
<b-form-group label="Default:" label-cols-sm="2">
<b-form-file id="file-default"></b-form-file>
</b-form-group>
<b-form-group label="Large:" label-cols-sm="2" label-size="lg">
<b-form-file id="file-large" size="lg"></b-form-file>
</b-form-group>
</div>
<!-- form-file-sizes.vue -->
**注意:** Bootstrap v4.xは、カスタムファイルコントロールのサイズをネイティブでサポートしていません。ただし、BootstrapVueには、カスタムファイル入力コントロールのサイズ変更をサポートするカスタムSCSS / CSSが含まれています。
placeholder プロパティまたはスコープ付き placeholder スロットを使用して、ファイルが選択されていない場合に表示されるプロンプトテキストを変更します。プロパティはプレーンテキストのみをサポートします.カスタムHTMLマークアップにはスロットを使用してください。スロットはプロパティよりも優先されます。
「参照」ラベルをグローバルに変更する場合は、グローバルスタイルシートに次のようなものを追加できます。また、多言語サイトの場合は :lang() を使用することをお勧めします。
.custom-file-input:lang(en) ~ .custom-file-label::after {
content: 'Browse';
}
または、 browse-text プロパティを介してカスタムファイルの参照ボタンテキストのコンテンツを設定することもできます。プレーンテキストのみがサポートされていることに注意してください。HTMLとコンポーネントはサポートされていません。
プロパティ file-name-formatter を、3つの引数を受け入れる関数に設定します
引数 | タイプ | 説明 |
---|---|---|
[1] files | 配列 | File オブジェクトのフラット配列 |
[2] filesTraversed | 配列 | ディレクトリモードの場合、File オブジェクトの配列の配列 |
[3] names | 配列 | ファイル名のフラット配列(文字列) |
関数は、単一のフォーマット済み文字列を返す必要があります(HTMLはサポートされていません)。ファイルが選択されていない場合、フォーマッターは呼び出されません。
<template>
<b-form-file multiple :file-name-formatter="formatNames"></b-form-file>
</template>
<script>
export default {
methods: {
formatNames(files) {
return files.length === 1 ? files[0].name : `${files.length} files selected`
}
}
}
</script>
<!-- file-formatter-function.vue -->
または、スコープ付きスロット file-name を使用してファイル名を表示することもできます。スコープ付きスロットは、次のプロパティを受け取ります
プロパティ | タイプ | 説明 |
---|---|---|
files | 配列 | File オブジェクトのフラット配列 |
filesTraversed | 配列 | ディレクトリモードの場合、File オブジェクトの配列の配列 |
names | 配列 | ファイル名のフラット配列(文字列) |
multiple プロパティの設定に関係なく、3つのプロパティはすべて常に配列です。
<template>
<b-form-file multiple>
<template slot="file-name" slot-scope="{ names }">
<b-badge variant="dark">{{ names[0] }}</b-badge>
<b-badge v-if="names.length > 1" variant="dark" class="ml-1">
+ {{ names.length - 1 }} More files
</b-badge>
</template>
</b-form-file>
</template>
<!-- file-formatter-slot.vue -->
file-name スロットを使用する場合、 file-name-formatter プロパティは無視されます。ファイルが選択されていない場合、スロットはレンダリングされません。
plain プロパティを設定することにより、<b-form-file> にブラウザネイティブのファイル入力をレンダリングさせることができます。 plain が設定されている場合、多くのカスタム機能が適用されないことに注意してください。
Bootstrapには、ほとんどのフォームコントロールで valid および invalid 状態の検証スタイルが含まれています。
一般的に、特定の種類のフィードバックに特定の状態を使用することをお勧めします
<b-form-file> にコンテキスト状態アイコンのいずれかを適用するには、 state プロパティを false (無効の場合)、 true (有効の場合)、または null (検証状態なし)に設定します。
**注意:**コンテキスト状態は、プレーンモードではサポートされていません。
<b-form-file>
に autofocus
プロパティが設定されている場合、入力はドキュメントに挿入(つまり、**マウント**)されたとき、または Vue の <keep-alive>
コンポーネント内で再アクティブ化されたときに自動的にフォーカスされます。 このプロパティは入力に autofocus
属性を設定するわけではなく、入力が表示可能になったときを認識することもできないことに注意してください。
元の入力を非表示にするカスタムバージョンの <b-form-file>
入力を使用する場合は、id
プロパティを介してドキュメント内で一意の ID 文字列を提供することを**強くお勧めします**。 これにより、支援技術を使用するユーザーの使いやすさを向上させるために必要な追加の ARIA 属性が自動的にレンダリングされます。
ファイルタイプの入力では、通常、v-model
は単方向です(つまり、選択されたファイルを事前に設定することはできません)。 ただし、v-model
を null
(単一モードの場合)または空の配列 []
(multiple
/directory
モードの場合)に設定することで、ファイル入力の選択されたファイルをクリアできます。
あるいは、<b-form-file>
は、ファイル入力をクリアするために呼び出すことができる reset()
メソッドを提供します。 reset()
メソッドを利用するには、<b-form-file>
コンポーネントへの参照を取得する必要があります。
<template>
<div>
<b-form-file v-model="file" ref="file-input" class="mb-2"></b-form-file>
<b-button @click="clearFiles" class="mr-2">Reset via method</b-button>
<b-button @click="file = null">Reset via v-model</b-button>
<p class="mt-2">Selected file: <b>{{ file ? file.name : '' }}</b></p>
</div>
</template>
<script>
export default {
data() {
return {
file: null
}
},
methods: {
clearFiles() {
this.$refs['file-input'].reset()
}
}
}
</script>
<!-- b-form-file-reset.vue -->
すべてのブラウザがファイル入力の値の設定(null
または空の文字列でさえも)を許可しているわけではないため、b-form-input
は、入力タイプを null
に変更し、すぐにタイプ file
に戻すという、クロスブラウザで機能する手法を採用しています。
directory
モード のネストされたファイル構造には、ブラウザでの Promise
のサポートが必要です。 IE 11 などの古いブラウザをアプリのターゲットとする場合は、Promise
のサポートを提供するポリフィルを含めてください。 Promise
のサポートが検出されない場合、ファイルは常にフラットなファイル構造になります。
Chromium の「バグ」のため、directory
モード のネストされたファイル構造は、現在、ディレクトリがファイル入力にドロップされた場合にのみサポートされています。 「参照」ダイアログを介して選択すると、常にフラット化された配列構造になります。 Mozilla は、Chromium と同じ方法で動作を実装しました。
<b-form-file>
コンポーネントのエイリアス<b-form-file>
プロパティ<b-form-file>
v-model<b-form-file>
スロット<b-form-file>
イベント<b-form-file>
は、次のエイリアスを使用して使用することもできます
<b-file>
注:コンポーネントエイリアスは、BootstrapVue のすべてをインポートするか、コンポーネントグループプラグインを使用する場合にのみ使用できます。
すべてのプロパティのデフォルト値は、グローバルに設定可能です。
プロパティ (クリックして昇順にソート) | タイプ (クリックして昇順にソート) | デフォルト | 説明 |
---|---|---|---|
accept | 文字列 | '' | ファイル入力の `accept` 属性に設定する値 |
autofocus | 真偽値 | false | `true` に設定すると、マウントされたとき、または keep-alive で再アクティブ化されたときに、コントロールに自動的にフォーカスしようとします。 コントロールに `autofocus` 属性を設定しません |
browse-text | 文字列 | '参照' | ファイル参照ボタンのテキストコンテンツ |
capture | 真偽値 | false | 設定されている場合、ブラウザにデバイスのカメラを使用するように指示します(サポートされている場合) |
directory | 真偽値 | false | `directory` モードを有効にします(サポートするブラウザの場合) |
disabled | 真偽値 | false | `true` に設定すると、コンポーネントの機能が無効になり、無効状態になります |
drop-placeholder | 文字列 | 'ここにファイルをドロップ' | ファイルがドラッグされていて、ドロップが許可されている場合にプレースホルダーとして表示するテキスト |
file-name-formatter | 関数 | 表示用にファイル名を書式設定するメソッド。 詳細については、ドキュメントを参照してください | |
form | 文字列 | フォームコントロールが属するフォームの ID。 コントロールに `form` 属性を設定します | |
id | 文字列 | レンダリングされたコンテンツに `id` 属性を設定するために使用され、必要に応じて追加の要素 ID を生成するためのベースとして使用されます | |
multiple | 真偽値 | false | 設定されている場合、複数のファイルを選択できます。 `v-model` は配列になります |
name | 文字列 | フォームコントロールの `name` 属性の値を設定します | |
no-drop | 真偽値 | false | ドラッグアンドドロップモードを無効にする |
no-drop-placeholder | 文字列 | '許可されていません' | ファイルがドラッグされていて、ドロップが許可されていない場合にプレースホルダーとして表示するテキスト |
no-traverse | 真偽値 | false | `directory` モードの場合に、ファイルをフラットな配列として返すかどうか |
placeholder | 文字列 | 'ファイルが選択されていません' | フォームコントロールに `placeholder` 属性値を設定します |
plain | 真偽値 | false | カスタムスタイルモードではなく、プレーンモードでフォームコントロールをレンダリングします |
required | 真偽値 | false | フォームコントロールに `required` 属性を追加します |
size | 文字列 | コンポーネントの外観のサイズを設定します。 'sm'、 'md'(デフォルト)、または 'lg' | |
state | 真偽値 | null | コンポーネントの検証状態の外観を制御します。 有効の場合は `true`、無効の場合は `false`、検証状態がない場合は `null` |
value v-model | Array または File | null | ファイル入力の現在の値。 単一の `File` オブジェクト、または `File` オブジェクトの配列になります(`multiple` または `directory` が設定されている場合)。 `null` または空の配列に設定して、ファイル入力をリセットできます |
v-model
プロパティ | イベント |
---|---|
value | input |
名前 | スコープ | 説明 |
---|---|---|
drop-placeholder | ファイルをドロップしようとしているときのプレースホルダーコンテンツ。 デフォルトは `drop-placeholder` プロパティの値です | |
file-name | ファイル名の書式設定のためのスコープ付きスロット | |
placeholder | いいえ | ファイルが選択されていないときのプレースホルダーコンテンツ。 デフォルトは `placeholder` プロパティ値です |
イベント | 引数 | 説明 |
---|---|---|
change |
| 入力の元の change イベント |
input |
| `v-model` 値を更新します(詳細についてはドキュメントを参照) |
次の名前付きエクスポートを使用して、個々のコンポーネントをプロジェクトにインポートできます
コンポーネント | 名前付きエクスポート | インポートパス |
---|---|---|
<b-form-file> | BFormFile | bootstrap-vue |
例
import { BFormFile } from 'bootstrap-vue' Vue.component('b-form-file', BFormFile)
このプラグインには、上記の個々のコンポーネントがすべて含まれています。プラグインには、コンポーネントエイリアスも含まれています。
名前付きエクスポート | インポートパス |
---|---|
FormFilePlugin | bootstrap-vue |
例
import { FormFilePlugin } from 'bootstrap-vue' Vue.use(FormFilePlugin)