コンポーネントエイリアス
<b-form-tags>
は、以下のエイリアスでも使用できます。
<b-tags>
注記:コンポーネントエイリアスは、BootstrapVue全体をインポートする場合、またはコンポーネントグループプラグインを使用する場合のみ使用できます。
カスタマイズ可能なインターフェースレンダリング、重複タグ検出、オプションのタグ検証機能を備えた、軽量なカスタムタグ付き入力フォームコントロール。
BootstrapVue v2.2.0以降で使用可能
タグは短い文字列の配列であり、カテゴリの割り当てなど、さまざまな方法で使用されます。デフォルトのユーザーインターフェースを使用するか、デフォルトのスコープ付きスロットを使用して独自のインターフェースを作成します。
タグの先頭と末尾の空白は削除され、重複したタグは許可されません。スペースを含むタグはデフォルトで許可されます。
タグは、追加ボタンをクリックするか、Enterキーを押すか、または新しいタグ入力でchange
イベントが発生した場合(つまり、入力からフォーカスが移動した場合)にオプションで追加されます。追加ボタンは、ユーザーが新しいタグ値を入力した場合にのみ表示されます。
デフォルトのレンダリング
<template>
<div>
<label for="tags-basic">Type a new tag and press enter</label>
<b-form-tags input-id="tags-basic" v-model="value"></b-form-tags>
<p class="mt-2">Value: {{ value }}</p>
</div>
</template>
<script>
export default {
data() {
return {
value: ['apple', 'orange']
}
}
}
</script>
<!-- form-tags-example.vue -->
no-add-on-enter
プロパティを使用して、Enterキーを押したときに新しいタグの追加を無効にし、add-on-change
プロパティを使用して、入力のchange
イベントでタグの追加を有効にすることができます。
セパレータ文字が入力されたときにタグを自動的に作成するには(例:Space、,など)、separator
プロパティにタグの追加をトリガーする文字を設定します。複数のセパレータ文字が必要な場合は、単一の文字列(例:' ,;'
)または文字の配列(例:[' ', ',', ';']
)として含めます。Space、,、または;が入力されると、新しいタグが追加されます。セパレータは1文字でなければなりません。
次の例では、Space、,、または;が入力されると、タグが自動的に作成されます。
<template>
<div>
<label for="tags-separators">Enter tags separated by space, comma or semicolon</label>
<b-form-tags
input-id="tags-separators"
v-model="value"
separator=" ,;"
placeholder="Enter new tags separated by space, comma or semicolon"
no-add-on-enter
></b-form-tags>
<p class="mt-2">Value: {{ value }}</p>
</div>
</template>
<script>
export default {
data() {
return {
value: ['one', 'two']
}
}
}
</script>
<!-- form-tags-separator.vue -->
remove-on-delete
プロパティが設定され、ユーザーがBackspace(またはDel)キーを押し、入力値が空の場合、タグリストの最後のタグが削除されます。
<template>
<div>
<label for="tags-remove-on-delete">Enter new tags separated by space</label>
<b-form-tags
input-id="tags-remove-on-delete"
:input-attrs="{ 'aria-describedby': 'tags-remove-on-delete-help' }"
v-model="value"
separator=" "
placeholder="Enter new tags separated by space"
remove-on-delete
no-add-on-enter
></b-form-tags>
<b-form-text id="tags-remove-on-delete-help" class="mt-2">
Press <kbd>Backspace</kbd> to remove the last tag entered
</b-form-text>
<p>Value: {{ value }}</p>
</div>
</template>
<script>
export default {
data() {
return {
value: ['apple', 'orange', 'grape']
}
}
}
</script>
<!-- form-tags-remove-on-delete.vue -->
デフォルトのタグ付きインターフェースの基本的なスタイルを変更するためのいくつかのプロパティがあります。
プロパティ | 説明 |
---|---|
tag-pills | タグをピルの外観でレンダリングします。 |
tag-variant | Bootstrapのコンテキストバリアントテーマカラーのいずれかをタグに適用します。 |
size | コンポーネントの外観のサイズを設定します。'sm'、'md'(デフォルト)、または'lg' |
placeholder | 新しいタグ入力要素のプレースホルダーテキスト。 |
state | コントロールのコンテキスト状態を設定します。true (有効の場合)、false (無効の場合)、またはnull 。 |
disabled | コンポーネントを無効な状態にします。 |
追加のプロパティについては、このページの下部にあるコンポーネントリファレンスセクションを参照してください。
コンポーネントのフォーカスと検証状態のスタイルは、BootstrapVueのカスタムCSSに依存しています。
<template>
<div>
<label for="tags-pills">Enter tags</label>
<b-form-tags
input-id="tags-pills"
v-model="value"
tag-variant="primary"
tag-pills
size="lg"
separator=" "
placeholder="Enter new tags separated by space"
></b-form-tags>
<p class="mt-2">Value: {{ value }}</p>
</div>
</template>
<script>
export default {
data() {
return {
value: ['apple', 'orange', 'grape']
}
}
}
</script>
<!-- form-tags-style-options.vue -->
<form>
送信との使用name
プロパティを指定しない限り、タグ付き入力の値は標準的なフォームaction
を介して送信されません。name
が指定されている場合、<b-form-tags>
は各タグに対して非表示の<input>
を作成します。非表示の入力には、name
属性にname
プロパティの値が設定されます。
非表示の入力は、カスタムレンダリングを使用する場合にも生成されます(name
プロパティが設定されている場合)。
デフォルトでは、<b-form-tags>
はユーザーが(大文字と小文字を区別する)重複タグを入力しようとしているかどうかを検出し、ユーザーに統合されたフィードバックを提供します。
tag-validator
プロパティを介して、タグ検証メソッドをオプションで提供できます。検証関数は、追加されるタグを1つの引数として受け取り、タグが検証に合格して追加できる場合はtrue
を、検証に失敗した場合(その場合はタグが配列に追加されない)はfalse
を返します。追加できなかった無効なタグをリストする、統合されたフィードバックがユーザーに提供されます。
タグ検証は、ユーザー入力によって追加されたタグに対してのみ行われます。v-model
によるタグの変更は検証されません。
<template>
<div>
<b-form-group label="Tags validation example" label-for="tags-validation" :state="state">
<b-form-tags
input-id="tags-validation"
v-model="tags"
:input-attrs="{ 'aria-describedby': 'tags-validation-help' }"
:tag-validator="tagValidator"
:state="state"
separator=" "
></b-form-tags>
<template #invalid-feedback>
You must provide at least 3 tags and no more than 8
</template>
<template #description>
<div id="tags-validation-help">
Tags must be 3 to 5 characters in length and all lower
case. Enter tags separated by spaces or press enter.
</div>
</template>
</b-form-group>
</div>
</template>
<script>
export default {
data() {
return {
tags: [],
dirty: false
}
},
computed: {
state() {
// Overall component validation state
return this.dirty ? (this.tags.length > 2 && this.tags.length < 9) : null
}
},
watch: {
tags(newValue, oldValue) {
// Set the dirty flag on first change to the tags array
this.dirty = true
}
},
methods: {
tagValidator(tag) {
// Individual tag validator function
return tag === tag.toLowerCase() && tag.length > 2 && tag.length < 6
}
}
}
</script>
<!-- b-form-tags-validation-feedback.vue -->
新しいタグ入力要素に新しいタグが入力された場合、検証に合格しなかったタグ、または重複タグが検出された場合、tag-state
イベントが送信されます。イベントハンドラーは、3つの配列を引数として受け取ります。
validTags
(検証に合格したタグ)invalidTags
(検証に合格しなかったタグ)duplicateTags
(既存のvalidTagsの複製となるタグ)このイベントは、新しいタグ入力の変更時(タグの一部と見なされる文字が入力された場合)、またはユーザーがタグの追加を試みた場合(つまり、Enterキー、追加ボタンのクリック、またはセパレータの入力)のみに送信されます。ユーザーが新しいタグ入力要素をクリアした場合(またはスペースのみが含まれている場合)、3つの配列は空になります。
<b-form-tags>
コンポーネントの外側で重複タグと無効タグに対する独自のフィードバックを提供している場合(tag-state
イベントを使用)、duplicate-tag-text
およびinvalid-tag-text
プロパティ(それぞれ)を空文字列(''
)またはnull
に設定することで、組み込みの重複メッセージと無効メッセージを無効にすることができます。
<template>
<div>
<label for="tags-state-event">Enter tags</label>
<b-form-tags
input-id="tags-state-event"
v-model="tags"
:tag-validator="validator"
placeholder="Enter tags (3-5 characters) separated by space"
separator=" "
@tag-state="onTagState"
></b-form-tags>
<p class="mt-2">Tags: {{ tags }}</p>
<p>Event values:</p>
<ul>
<li>validTags: {{ validTags }}</li>
<li>invalidTags: {{ invalidTags }}</li>
<li>duplicateTags: {{ duplicateTags }}</li>
</ul>
</div>
</template>
<script>
export default {
data() {
return {
tags: [],
validTags: [],
invalidTags: [],
duplicateTags: []
}
},
methods: {
onTagState(valid, invalid, duplicate) {
this.validTags = valid
this.invalidTags = invalid
this.duplicateTags = duplicate
},
validator(tag) {
return tag.length > 2 && tag.length < 6
}
}
}
</script>
<!-- b-form-tags-tags-state-event.vue -->
ユーザーが追加できるタグの数を制限する場合は、limit
プロパティを使用します。設定されている場合、limit
で許可されている数を超えるタグを追加できるのは、v-model
を使用する場合のみです。
タグの制限に達すると、ユーザーは入力できますが、タグの追加は無効になります。制限に達したことをユーザーに知らせるメッセージが表示されます。このメッセージはlimit-tags-text
プロパティで設定できます。空文字列(''
)またはnull
に設定すると、フィードバックが無効になります。
タグの削除は、limit
プロパティの影響を受けません。
<template>
<div>
<label for="tags-limit">Enter tags</label>
<b-form-tags input-id="tags-limit" v-model="value" :limit="limit" remove-on-delete></b-form-tags>
<p class="mt-2">Value: {{ value }}</p>
</div>
</template>
<script>
export default {
data() {
return {
value: [],
limit: 5
}
}
}
</script>
<!-- b-form-tags-limit.vue -->
タグコントロールの外観を変更したい場合は、デフォルトのスコープ付きスロットを使用して独自のカスタムレンダリングを提供できます。独自のタグを作成するか、ヘルパーコンポーネント<b-form-tag>
を使用できます。
デフォルトのスコープ付きスロットは、カスタムインターフェースのレンダリングに使用できる多数のプロパティとメソッドを提供します。インターフェースを生成するために、すべてプロパティまたはメソッドが必要なわけではありません。
デフォルトのスロットスコーププロパティは次のとおりです。
プロパティ | 型 | 説明 |
---|---|---|
addButtonText | 文字列 | add-button-text プロパティの値 |
addButtonVariant | 文字列 | add-button-variant プロパティの値 |
addTag | 関数 | 新規タグを追加するメソッド。タグは入力値を想定していますが、追加するタグ値を1つの引数としてオプションで受け付けます。 |
disableAddButton | ブール値 | 入力されたタグ(すべて無効または重複)を追加できない場合、true になります。 |
disabled | ブール値 | コンポーネントが無効状態の場合true 。disabled プロパティの値。 |
duplicateTagText | 文字列 | duplicate-tag-text プロパティの値。 |
duplicateTags | 配列 | ユーザーが入力した重複タグの配列。 |
form | 文字列 | v2.20.0+ form プロパティの値。 |
inputAttrs | オブジェクト | v-bind="inputAttrs" を介して新しいタグ入力要素に適用する属性のオブジェクト。詳細は下記参照。 |
inputHandlers | オブジェクト | v-on="inputHandlers" を介して新しいタグ入力要素に適用するイベントハンドラのオブジェクト。詳細は下記参照。 |
inputId | 文字列 | 新しいタグ入力要素に追加するID。デフォルトはプロパティinput-id 。指定されていない場合は、一意のIDが自動生成されます。'inputAttrs.id'からも利用可能です。 |
inputType | 文字列 | v2.3.0+ レンダリングする入力の種類(プロパティinput-type の正規化されたバージョン)。 |
invalidTagText | 文字列 | invalid-tag-text プロパティの値。 |
invalidTags | 配列 | ユーザーが入力した無効なタグの配列。 |
isDuplicate | ブール値 | ユーザー入力が重複タグを含む場合true 。 |
isInvalid | ブール値 | ユーザー入力が無効なタグを含む場合true 。 |
isLimitReached | ブール値 | v2.17.0+ limit が設定されていて、タグ数が制限に達した場合true 。 |
limitTagsText | 文字列 | v2.17.0+ limit-tags-text プロパティの値。 |
limit | 文字列 | v2.17.0+ limit プロパティの値。 |
noTagRemove | ブール値 | v2.21.0+ no-tag-remove プロパティの値。 |
placeholder | 文字列 | placeholder プロパティの値。 |
removeTag | 関数 | タグを削除するメソッド。削除するタグ値を1つの引数として受け付けます。 |
required | ブール値 | v2.20.0+ required プロパティの値。 |
separator | 文字列 | separator プロパティの値。 |
size | 文字列 | size プロパティの値。 |
state | ブール値 | コンポーネントのコンテキスト状態。state プロパティの値。可能な値はtrue 、false 、またはnull 。 |
tagClass | 文字列、配列、またはオブジェクト | tag-variant プロパティの値。タグ要素に適用するクラス(またはクラスの集合)。 |
tagPills | ブール値 | tag-pills プロパティの値。 |
tagRemoveLabel | 文字列 | tag-remove-label プロパティの値。タグの削除ボタンのaria-label 属性として使用されます。 |
tagVariant | 文字列 | tag-variant プロパティの値。 |
tags | 配列 | 現在のタグ文字列の配列。 |
inputAttrs
オブジェクトのプロパティinputAttrs
オブジェクトには、新しいタグ入力要素にバインドする属性(v-bind
)が含まれています。
プロパティ | 型 | 説明 |
---|---|---|
disabled | ブール値 | 新しいタグ入力に対するdisabled 属性。disabled プロパティの値。 |
form | 文字列 | 新しいタグ入力に対するform 属性。form プロパティの値。 |
id | 文字列 | 新しいタグ入力に対するid 属性。 |
value | 文字列 | 新しいタグ入力に対するvalue 属性。 |
inputAttrs
オブジェクトには、input-attrs
プロパティで設定された属性も含まれます。ただし、上記の属性はinput-attrs
プロパティで指定された同じ属性よりも優先されます。
inputHandlers
オブジェクトのプロパティinputHandlers
オブジェクトには、新しいタグ入力要素にバインドするイベントハンドラ(v-on
)が含まれています。
プロパティ | 型 | 説明 |
---|---|---|
change | 関数 | 入力要素のchange イベントのイベントハンドラ。イベントオブジェクトまたは文字列のいずれかの単一引数を受け付けます。変更により、タグの追加がトリガーされます。 |
input | 関数 | 入力要素のinput イベントのイベントハンドラ。イベントオブジェクトまたは文字列のいずれかの単一引数を受け付けます。新しいタグ入力要素の内部v-modelを更新します。 |
keydown | 関数 | 入力要素のkeydown Enter および Del イベントのイベントハンドラ。ネイティブのkeydownイベントオブジェクトを単一引数として受け付けます。 |
必要な場合、change
ハンドラはadd-on-change
プロパティを介して有効にする必要があります。そうでない場合は、noopメソッドになります。
このスコープには、ネイティブの<input>
または<select>
要素に直接バインドできる属性とイベントハンドラが含まれています。
次の例には、スクリーンリーダーのサポートに必要な推奨されるARIA属性とロールが含まれています。
<template>
<div>
<b-form-tags v-model="value" no-outer-focus class="mb-2">
<template v-slot="{ tags, inputAttrs, inputHandlers, addTag, removeTag }">
<b-input-group aria-controls="my-custom-tags-list">
<input
v-bind="inputAttrs"
v-on="inputHandlers"
placeholder="New tag - Press enter to add"
class="form-control">
<b-input-group-append>
<b-button @click="addTag()" variant="primary">Add</b-button>
</b-input-group-append>
</b-input-group>
<ul
id="my-custom-tags-list"
class="list-unstyled d-inline-flex flex-wrap mb-0"
aria-live="polite"
aria-atomic="false"
aria-relevant="additions removals"
>
<!-- Always use the tag value as the :key, not the index! -->
<!-- Otherwise screen readers will not read the tag
additions and removals correctly -->
<b-card
v-for="tag in tags"
:key="tag"
:id="`my-custom-tags-tag_${tag.replace(/\s/g, '_')}_`"
tag="li"
class="mt-1 mr-1"
body-class="py-1 pr-2 text-nowrap"
>
<strong>{{ tag }}</strong>
<b-button
@click="removeTag(tag)"
variant="link"
size="sm"
:aria-controls="`my-custom-tags-tag_${tag.replace(/\s/g, '_')}_`"
>remove</b-button>
</b-card>
</ul>
</template>
</b-form-tags>
</div>
</template>
<script>
export default {
data() {
return {
value: ['apple', 'orange', 'banana', 'pear', 'peach']
}
}
}
</script>
<!-- form-tags-custom-native.vue -->
このスコープには、ほとんどのカスタム入力またはセレクトコンポーネントに直接バインドできる属性とイベントハンドラが含まれています(イベントハンドラは、文字列のタグ値またはネイティブのイベントオブジェクトのいずれかを受け付けます)。文字が入力されるとinput
を、入力値が変更されると(例:フォーカスを外す時、選択時)change
を発行し、value
プロパティをv-modelとして使用するコンポーネントは、変更せずに動作するはずです。
この例では、<b-form-tag>
ヘルパーコンポーネントを使用していますが、標準のHTMLまたはコンポーネントを使用してタグを自由にレンダリングできます。
<template>
<div>
<b-form-tags v-model="value" no-outer-focus class="mb-2">
<template v-slot="{ tags, inputAttrs, inputHandlers, tagVariant, addTag, removeTag }">
<b-input-group class="mb-2">
<b-form-input
v-bind="inputAttrs"
v-on="inputHandlers"
placeholder="New tag - Press enter to add"
class="form-control"
></b-form-input>
<b-input-group-append>
<b-button @click="addTag()" variant="primary">Add</b-button>
</b-input-group-append>
</b-input-group>
<div class="d-inline-block" style="font-size: 1.5rem;">
<b-form-tag
v-for="tag in tags"
@remove="removeTag(tag)"
:key="tag"
:title="tag"
:variant="tagVariant"
class="mr-1"
>{{ tag }}</b-form-tag>
</div>
</template>
</b-form-tags>
</div>
</template>
<script>
export default {
data() {
return {
value: ['apple', 'orange', 'banana']
}
}
}
</script>
<!-- form-tags-custom-components-input.vue -->
これは、事前に定義されたタグセットから選択するためのカスタムセレクトコンポーネントを使用する例です。
<template>
<div>
<b-form-group label="Tagged input using select" label-for="tags-component-select">
<!-- Prop `add-on-change` is needed to enable adding tags vie the `change` event -->
<b-form-tags
id="tags-component-select"
v-model="value"
size="lg"
class="mb-2"
add-on-change
no-outer-focus
>
<template v-slot="{ tags, inputAttrs, inputHandlers, disabled, removeTag }">
<ul v-if="tags.length > 0" class="list-inline d-inline-block mb-2">
<li v-for="tag in tags" :key="tag" class="list-inline-item">
<b-form-tag
@remove="removeTag(tag)"
:title="tag"
:disabled="disabled"
variant="info"
>{{ tag }}</b-form-tag>
</li>
</ul>
<b-form-select
v-bind="inputAttrs"
v-on="inputHandlers"
:disabled="disabled || availableOptions.length === 0"
:options="availableOptions"
>
<template #first>
<!-- This is required to prevent bugs with Safari -->
<option disabled value="">Choose a tag...</option>
</template>
</b-form-select>
</template>
</b-form-tags>
</b-form-group>
</div>
</template>
<script>
export default {
data() {
return {
options: ['Apple', 'Orange', 'Banana', 'Lime', 'Peach', 'Chocolate', 'Strawberry'],
value: []
}
},
computed: {
availableOptions() {
return this.options.filter(opt => this.value.indexOf(opt) === -1)
}
}
}
</script>
<!-- b-form-tags-components-select.vue -->
カスタム入力がinput
とchange
を模倣するカスタムイベント名を使用している場合、またはkeydownに.native
修飾子が必要な場合、イベントハンドラをバインドするために以下のような方法を使用できます。
<template #default="{ inputAttrs, inputHandlers, removeTag, tags }">
<custom-input
:id="inputAttrs.id"
:vistom-value-prop="inputAttrs.value"
@custom-input-event="inputHandlers.input($event)"
@custom-change-event="inputHandlers.change($event)"
@keydown.native="inputHandlers.keydown($event)"
></custom-input>
<template v-for="tag in tags">
<!-- Your custom tag list here -->
</template>
</template>
inputHandlers.input
ハンドラは、ユーザーが入力した各文字で更新するイベントにバインドする必要があります。これは、入力中のタグ検証を行うために必要です。
inputHandlers
がカスタム入力では機能しない場合、またはタグの作成をより細かく制御する必要がある場合、デフォルトのスロットのスコープを介して提供される追加のプロパティを利用できます。
<template>
<div>
<b-form-checkbox switch size="lg" v-model="disabled">Disable</b-form-checkbox>
<b-form-tags
v-model="value"
@input="resetInputValue()"
tag-variant="success"
class="mb-2 mt-2"
:disabled="disabled"
no-outer-focus
placeholder="Enter a new tag value and click Add"
:state="state"
>
<template v-slot="{tags, inputId, placeholder, disabled, addTag, removeTag }">
<b-input-group>
<!-- Always bind the id to the input so that it can be focused when needed -->
<b-form-input
v-model="newTag"
:id="inputId"
:placeholder="placeholder"
:disabled="disabled"
:formatter="formatter"
></b-form-input>
<b-input-group-append>
<b-button @click="addTag(newTag)" :disabled="disabled" variant="primary">Add</b-button>
</b-input-group-append>
</b-input-group>
<b-form-invalid-feedback :state="state">
Duplicate tag value cannot be added again!
</b-form-invalid-feedback>
<ul v-if="tags.length > 0" class="mb-0">
<li v-for="tag in tags" :key="tag" :title="`Tag: ${tag}`" class="mt-2">
<span class="d-flex align-items-center">
<span class="mr-2">{{ tag }}</span>
<b-button
:disabled="disabled"
size="sm"
variant="outline-danger"
@click="removeTag(tag)"
>
remove tag
</b-button>
</span>
</li>
</ul>
<b-form-text v-else>
There are no tags specified. Add a new tag above.
</b-form-text>
</template>
</b-form-tags>
</div>
</template>
<script>
export default {
data() {
return {
newTag: '',
disabled: false,
value: []
}
},
computed: {
state() {
// Return false (invalid) if new tag is a duplicate
return this.value.indexOf(this.newTag.trim()) > -1 ? false : null
}
},
methods: {
resetInputValue() {
this.newTag = ''
},
formatter(value) {
return value.toUpperCase()
}
}
}
</script>
<!-- form-tags-custom-components-advanced.vue -->
これは、事前に定義されたタグセットから選択または検索するために<b-dropdown>
コンポーネントを使用する例です。
<template>
<div>
<b-form-group label="Tagged input using dropdown" label-for="tags-with-dropdown">
<b-form-tags id="tags-with-dropdown" v-model="value" no-outer-focus class="mb-2">
<template v-slot="{ tags, disabled, addTag, removeTag }">
<ul v-if="tags.length > 0" class="list-inline d-inline-block mb-2">
<li v-for="tag in tags" :key="tag" class="list-inline-item">
<b-form-tag
@remove="removeTag(tag)"
:title="tag"
:disabled="disabled"
variant="info"
>{{ tag }}</b-form-tag>
</li>
</ul>
<b-dropdown size="sm" variant="outline-secondary" block menu-class="w-100">
<template #button-content>
<b-icon icon="tag-fill"></b-icon> Choose tags
</template>
<b-dropdown-form @submit.stop.prevent="() => {}">
<b-form-group
label="Search tags"
label-for="tag-search-input"
label-cols-md="auto"
class="mb-0"
label-size="sm"
:description="searchDesc"
:disabled="disabled"
>
<b-form-input
v-model="search"
id="tag-search-input"
type="search"
size="sm"
autocomplete="off"
></b-form-input>
</b-form-group>
</b-dropdown-form>
<b-dropdown-divider></b-dropdown-divider>
<b-dropdown-item-button
v-for="option in availableOptions"
:key="option"
@click="onOptionClick({ option, addTag })"
>
{{ option }}
</b-dropdown-item-button>
<b-dropdown-text v-if="availableOptions.length === 0">
There are no tags available to select
</b-dropdown-text>
</b-dropdown>
</template>
</b-form-tags>
</b-form-group>
</div>
</template>
<script>
export default {
data() {
return {
options: ['Apple', 'Orange', 'Banana', 'Lime', 'Peach', 'Chocolate', 'Strawberry'],
search: '',
value: []
}
},
computed: {
criteria() {
// Compute the search criteria
return this.search.trim().toLowerCase()
},
availableOptions() {
const criteria = this.criteria
// Filter out already selected options
const options = this.options.filter(opt => this.value.indexOf(opt) === -1)
if (criteria) {
// Show only options that match criteria
return options.filter(opt => opt.toLowerCase().indexOf(criteria) > -1);
}
// Show all options available
return options
},
searchDesc() {
if (this.criteria && this.availableOptions.length === 0) {
return 'There are no tags matching your search criteria'
}
return ''
}
},
methods: {
onOptionClick({ option, addTag }) {
addTag(option)
this.search = ''
}
}
}
</script>
<!-- b-form-tags-dropdown-example.vue -->
次の手順で、好みのレンダリングスタイルを持つカスタムラッパーコンポーネントを簡単に作成できます。
<template>
<b-form-tags :value="value" @input="$emit('input', $event)">
<template v-slot="{ tags, addTag, removeTag, inputAttrs, inputHandlers }">
<!-- Place your custom rendering here -->
</template>
</b-form-tags>
</template>
<script>
import { BFormTags } from 'bootstrap-vue'
export default {
name: 'MyCustomTags',
components: { BFormTags },
model: {
prop: 'value',
event: 'input'
},
props: {
value: {
type: Array,
default: () => []
}
}
}
</script>
<b-form-tag>
ヘルパーコンポーネントBootstrapVueは、<b-form-tags>
のデフォルトのスコープ付きスロットで使用するためのヘルパーコンポーネント<b-form-tag>
を提供します。このコンポーネントは、<b-badge>
と<b-button-close>
に基づいています。
<b-form-tag>
は<b-badge>
と同じバリアントをサポートし、pill
スタイルもサポートします。サイズは、包含要素のフォントサイズに基づいています。
<b-form-tag>
の削除ボタンがクリックされると、remove
イベントが発行されます。
親コンテナに対して幅が広いタグは、自動的にテキストコンテンツが省略記号で切り捨てられます。このため、<b-form-tag>
のデフォルトスロットでタグコンテンツを使用する場合は、title
プロパティを指定することをお勧めします。
注記 <b-form-tag>
には、適切なスタイルのためにBootstrapVueのカスタムCSS/SCSSが必要です。
<b-form-tags>
コンポーネントエイリアス<b-form-tags>
プロパティ<b-form-tags>
v-model<b-form-tags>
スロット<b-form-tags>
イベント<b-form-tags>
は、以下のエイリアスでも使用できます。
<b-tags>
注記:コンポーネントエイリアスは、BootstrapVue全体をインポートする場合、またはコンポーネントグループプラグインを使用する場合のみ使用できます。
すべてのプロパティのデフォルト値は、グローバルに設定可能です。
プロパティ (昇順にソートするにはクリックしてください) | 型 (昇順にソートするにはクリックしてください) | デフォルト | 説明 |
---|---|---|---|
add-button-text | 文字列 | '追加' | 組み込みの「追加」ボタンのテキスト。スロット`add-button-text`が優先されます。 |
add-button-variant | 文字列 | 'outline-secondary' | '追加'ボタンにBootstrapテーマカラーバリアントのいずれかを適用します。 |
add-on-change | ブール値 | false | 設定されている場合、入力の'change'イベントでタグの追加を有効にします。 |
autofocus | ブール値 | false | `true`に設定されている場合、マウント時にコントロールに自動的にフォーカスを試みます。または、keep-aliveの場合に再アクティブ化します。コントロールに`autofocus`属性を設定しません。 |
disabled | ブール値 | false | true に設定すると、コンポーネントの機能を無効にし、無効状態にします。 |
重複タグテキスト | 文字列 | 「重複タグ」 | 重複タグが検出された場合のメッセージです。メッセージを無効にするには、空文字列に設定します。 |
フィードバックARIAライブ v2.22.0以降 | 文字列 | 「assertive」 | フィードバックテキストの`aria-live`属性に使用する値です。 |
form | 文字列 | フォームコントロールが属するフォームのIDです。コントロールの`form`属性を設定します。 | |
id | 文字列 | レンダリングされたコンテンツの`id`属性を設定するために使用され、必要に応じて追加の要素IDを生成するためのベースとして使用されます。 | |
入力フォーカスセレクターの無視 v2.16.0以降 | Array またはString | `.b-form-tag button input select` | クリックして入力ルーチンにフォーカスする際に、CSSセレクターで指定された特定の要素を無視します。 |
入力属性 | オブジェクト | {} | 新しいタグ入力要素に適用する追加属性です。 |
入力クラス | Array またはObject またはString | 新しいタグ入力要素に適用するクラス(またはクラス名)です。 | |
入力ID | 文字列 | 新しいタグ入力要素に適用するIDです。指定しない場合、一意のIDが自動生成されます。 | |
入力タイプ v2.3.0以降 | 文字列 | 「text」 | 使用する入力の種類を指定します:「text」、「email」、「tel」、「url」、「number」。デフォルトは「text」です。 |
無効なタグテキスト | 文字列 | 「無効なタグ」 | 無効なタグが検出された場合のエラーメッセージです。メッセージを無効にするには、空文字列に設定します。 |
limit v2.17.0以降 | 数値 | 追加できるタグの最大数です。コンポーネントの外から操作された場合は、この制限を超える可能性があります。 | |
タグ制限テキスト v2.17.0以降 | 文字列 | 「タグの制限に達しました」 | 制限に達した場合のメッセージです。メッセージを無効にするには、空文字列に設定します。 |
名前 | 文字列 | フォームコントロールの「name」属性の値を設定します。設定すると、各タグに対して非表示の入力が作成されます。 | |
Enterキーでの追加を無効化 | ブール値 | false | 設定すると、入力の「keydown.enter」イベントでタグの追加が無効になります。 |
外部フォーカスを無効化 | ブール値 | false | 設定すると、コンポーネントルート要素のフォーカススタイルが無効になります。 |
タグ削除を無効化 v2.21.0以降 | ブール値 | false | 設定すると、タグに削除ボタンが表示されなくなります。 |
placeholder | 文字列 | 「タグを追加...」 | フォームコントロールの「placeholder」属性の値を設定します。 |
削除時の削除 | ブール値 | false | 設定すると、ユーザーがDeleteキーまたはBackspaceキーを押して入力が空の場合、タグの最後のタグが削除されます。 |
required | ブール値 | false | フォームコントロールに`required`属性を追加します。 |
separator | Array またはString | タグを作成するトリガーとなる区切り文字です。 | |
size | 文字列 | コンポーネントの外観のサイズを設定します。'sm'、'md'(デフォルト)、または'lg' | |
state | ブール値 | null | コンポーネントの検証状態の外観を制御します。有効な場合は`true`、無効な場合は`false`、検証状態がない場合は`null`です。 |
タグクラス | Array またはObject またはString | タグに適用するクラス(またはクラス名)です。 | |
tag-pills | ブール値 | false | 組み込みタグにピル形式の外観を適用します。 |
タグ削除ラベル | 文字列 | 「タグを削除」 | タグ内の削除ボタンの「aria-label」属性の値です。 |
タグ削除ラベル v2.5.0以降 | 文字列 | 「タグが削除されました」 | スクリーンリーダーユーザーに削除されたタグを通知するaria-live領域のラベルです。 |
タグバリデーター | 関数 | オプションのタグバリデーターメソッドです。追加されるタグを単一引数として渡します。タグが検証に合格した場合は'true'、追加できない場合は'false'を返します。 | |
tag-variant | 文字列 | 「secondary」 | Bootstrapテーマの色バリアントの1つをタグに適用します。 |
value v-model | 配列 | [] | 現在のタグの配列です。これがv-modelです。 |
v-model
プロパティ | イベント |
---|---|
value | input |
名前 | スコープ付き | 説明 |
---|---|---|
add-button-text | いいえ | 組み込みの「追加」ボタンに配置するコンテンツです。「add-button-text」プロップよりも優先されます。デフォルトのスコープ付きスロットが提供されている場合は使用されません。 |
デフォルト | タグコンポーネントのデフォルトのレンダリングをオーバーライドするスロットです。 |
イベント | 引数 | 説明 |
---|---|---|
blur |
| コンポーネントがフォーカスを失ったときに発生します。 |
focus |
| コンポーネントがフォーカスを獲得したときに発生します。 |
focusin |
| コンポーネントの内部要素がフォーカスを獲得したときに発生します。 |
focusout |
| コンポーネントの内部要素がフォーカスを失ったときに発生します。 |
input |
| タグが変更されたときに発生します。v-modelを更新します。 |
タグの状態 |
| ユーザー入力のタグが解析されたときに発生します。 |
<b-form-tag>
は、次のエイリアスでも使用できます。
<b-tag>
注記:コンポーネントエイリアスは、BootstrapVue全体をインポートする場合、またはコンポーネントグループプラグインを使用する場合のみ使用できます。
すべてのプロパティのデフォルト値は、グローバルに設定可能です。
プロパティ | 型 | デフォルト | 説明 |
---|---|---|---|
disabled | ブール値 | false | true に設定すると、コンポーネントの機能を無効にし、無効状態にします。 |
id | 文字列 | レンダリングされたコンテンツの`id`属性を設定するために使用され、必要に応じて追加の要素IDを生成するためのベースとして使用されます。 | |
削除不可 v2.21.0以降 | ブール値 | false | 設定すると、タグに削除ボタンが表示されなくなります。 |
ピル | ブール値 | false | タグにピル形式の外観を適用します。 |
削除ラベル | 文字列 | 「タグを削除」 | タグ内の削除ボタンの「aria-label」属性の値です。 |
タグ | 文字列 | 「span」 | デフォルトのタグの代わりにレンダリングするHTMLタグを指定します。 |
タイトル | 文字列 | タグの「title」属性に配置する値です。デフォルトのスロットが提供されていない場合、タグコンテンツにも使用されます。 | |
バリアント | 文字列 | 「secondary」 | Bootstrapテーマの色バリアントの1つをコンポーネントに適用します。 |
名前 | 説明 |
---|---|
デフォルト | タグに配置するコンテンツです。`title`プロップをオーバーライドします。 |
イベント | 引数 | 説明 |
---|---|---|
削除 | 削除ボタンがクリックされたときに発生します。 |
次の名前付きエクスポートを使用して、個々のコンポーネントをプロジェクトにインポートできます。
コンポーネント | 名前付きエクスポート | インポートパス |
---|---|---|
<b-form-tags> | BFormTags | bootstrap-vue |
<b-form-tag> | BFormTag | bootstrap-vue |
例
import { BFormTags } from 'bootstrap-vue' Vue.component('b-form-tags', BFormTags)
このプラグインには、上記にリストされているすべての個々のコンポーネントが含まれています。プラグインには、コンポーネントのエイリアスも含まれています。
名前付きエクスポート | インポートパス |
---|---|
FormTagsPlugin | bootstrap-vue |
例
import { FormTagsPlugin } from 'bootstrap-vue' Vue.use(FormTagsPlugin)