Сгенерируйте ваши опции выбора, передав массив или объект в свойства options
:
<template>
<div>
<b-form-select v-model="selected" :options="options"></b-form-select>
<b-form-select v-model="selected" :options="options" size="sm" class="mt-3"></b-form-select>
<div class="mt-3">Выбрано: <strong></strong></div>
</div>
</template>
<script>
export default {
data() {
return {
selected: null,
options: [
{ value: null, text: 'Пожалуйста, выберите опцию' },
{ value: 'a', text: 'Это первая опция' },
{ value: 'b', text: 'Выбранная опция' },
{ value: { C: '3PO' }, text: 'Эта опция со значением объекта' },
{ value: 'd', text: 'Эта одна отключена', disabled: true }
]
}
}
}
</script>
Вы даже можете определить группы опций с помощью свойства options
:
<template>
<div>
<b-form-select v-model="selected" :options="options"></b-form-select>
<div class="mt-3">Выбрано: <strong></strong></div>
</div>
</template>
<script>
export default {
data() {
return {
selected: null,
options: [
{ value: null, text: 'Пожалуйста, выберите опцию' },
{ value: 'a', text: 'Это первая опция' },
{ value: 'b', text: 'Выбранная опция', disabled: true },
{
label: 'Сгруппированные опции',
options: [
{ value: { C: '3PO' }, text: 'Опция со значением объекта' },
{ value: { R: '2D2' }, text: 'Другая опция со значением объекта' }
]
}
]
}
}
}
</script>
Или укажите свои параметры и группы параметров вручную:
<template>
<div>
<b-form-select v-model="selected" class="mb-3">
<b-form-select-option :value="null">Пожалуйста, выберите опцию</b-form-select-option>
<b-form-select-option value="a">Опция A</b-form-select-option>
<b-form-select-option value="b" disabled>Опция B (отключена)</b-form-select-option>
<b-form-select-option-group label="Сгруппированные опции">
<b-form-select-option :value="{ C: '3PO' }">Опция со значением объекта</b-form-select-option>
<b-form-select-option :value="{ R: '2D2' }">Другая опция со значением объекта</b-form-select-option>
</b-form-select-option-group>
</b-form-select>
<div class="mt-2">Выбрано: <strong></strong></div>
</div>
</template>
<script>
export default {
data() {
return {
selected: null
}
}
}
</script>
Не стесняйтесь смешивать опцию options
с <b-form-select-option>
и <b-form-select-option-group>
. Параметры и группы параметров, размещенные вручную, появятся под параметрами, созданными с помощью свойства options
. Чтобы разместить ручные опции и группы опций выше опций, заданных опцией options
, используйте именованный слот first
.
<template>
<div>
<b-form-select v-model="selected" :options="options" class="mb-3">
<template #first>
<b-form-select-option :value="null" disabled>-- Пожалуйста, выберите опцию --</b-form-select-option>
</template>
<b-form-select-option value="C">Опция C</b-form-select-option>
<b-form-select-option value="D">Опция D</b-form-select-option>
</b-form-select>
<div class="mt-3">Выбрано: <strong></strong></div>
</div>
</template>
<script>
export default {
data() {
return {
selected: null,
options: [
{ value: 'A', text: 'Опция A (из свойства опций)' },
{ value: 'B', text: 'Опция B (из свойства опций)' }
]
}
}
}
</script>
Свойство Options
options
может быть массивом строк или объектов или объектом значения ключа. Доступные поля:
value
Выбранное значение, которое будет установлено на v-model
disabled
Отключает элемент для выбора text
Отображать текст или html
Отображать базовый инлайновый html
value
может быть строкой, числом или простым объектом. Избегайте использования сложных типов в значениях.
Если указаны и html
, и text
, приоритет будет иметь html
. В поле html
поддерживается только базовый / собственный HTML (компоненты работать не будут). Обратите внимание, что не все браузеры будут отображать встроенный html (т.е. <i>
, <strong>
и т. д.). Внутри элементов <option>
элемента <select>
.
Будьте осторожны при размещении пользовательского контента в поле html
, поскольку это может сделать вас уязвимыми для XSS-атаки, если вы сначала не очистите строку, введенную пользователем.
Опции как массив
const options = ['A', 'B', 'C', { text: 'D', value: { d: 1 }, disabled: true }, 'E', 'F']
Если запись массива является строкой, она будет использоваться как для сгенерированных полей value
и text
.
Вы можете смешивать, используя строки и объекты в массиве.
Внутри BootstrapVue преобразует указанный выше массив в следующий формат (формат массив объектов):
const options = [
{ text: 'A', value: 'A', disabled: false },
{ text: 'B', value: 'B', disabled: false },
{ text: 'C', value: 'C', disabled: false },
{ text: 'D', value: { d: 1 }, disabled: true },
{ text: 'E', value: 'E', disabled: false },
{ text: 'F', value: 'F', disabled: false }
]
Параметры как массив объектов
const options = [
{ text: 'Элемент 1', value: 'first' },
{ text: 'Элемент 2', value: 'second' },
{ html: '<b>Элемент</b> 3', value: 'third', disabled: true },
{ text: 'Элемент 4' },
{ text: 'Элемент 5', value: { foo: 'bar', baz: true } }
]
Если value
отсутствует, то text
будет использоваться как поля value
и text
. Если вы используете свойство html
, вы должны предоставить свойство value
.
Новое в версии 2.2.0 Чтобы определить группы опций, просто добавьте объект со свойством label
в качестве имени группы и свойством options
с массивом опций группы.
const options = [
{ text: 'Элемент 1', value: 'first' },
{ text: 'Элемент 2', value: 'second' },
{
label: 'Сгруппированные опции',
options: [{ html: '<b>Элемент</b> 3', value: 'third', disabled: true }, { text: 'Элемент 4' }]
},
{ text: 'Элемент 5', value: { foo: 'bar', baz: true } }
]
Опции как объект
Устарело
Ключи отображаются в value
, а значения отображаются в параметр text
.
const options = {
a: 'Элемент A',
b: 'Элемент B',
c: { html: 'Элемент C', disabled: true },
d: { text: 'Элемент D', value: 'overridden_value' },
e: { text: 'Элемент E', value: { foo: 'bar', baz: true } }
}
Внутри BootstrapVue преобразует указанный выше объект в следующий формат (формат массив объектов):
const options = [
{ text: 'Элемент A', value: 'a', disabled: false },
{ text: 'Элемент B', value: 'b', disabled: false },
{ html: 'Элемент C', value: 'c', disabled: false },
{ text: 'Элемент D', value: 'overridden_value', disabled: true },
{ text: 'Элемент E', value: { foo: 'bar', baz: true }, disabled: false }
]
Примечание: При использовании формата объекта порядок окончательного массива не гарантирован. По этой причине рекомендуется использовать любой из ранее упомянутых форматов массивов.
Изменение названий полей опций
Если вы хотите настроить имена свойств поля (например, используя поле name
для отображения text
), вы можете легко изменить их, установив text-field
, html-field
, value-field
и disabled-field
прописывает строку, содержащую имя свойства, которое вы хотите использовать:
<template>
<div>
<b-form-select
v-model="selected"
:options="options"
class="mb-3"
value-field="item"
text-field="name"
disabled-field="notEnabled"
></b-form-select>
<div class="mt-3">Выбрано: <strong></strong></div>
</div>
</template>
<script>
export default {
data() {
return {
selected: 'A',
options: [
{ item: 'A', name: 'Опция A' },
{ item: 'B', name: 'Опция B' },
{ item: 'D', name: 'Опция C', notEnabled: true },
{ item: { d: 1 }, name: 'Опция D' }
]
}
}
}
</script>
Примечания опции
Если начальное значение вашего выражения v-model
не соответствует ни одному из параметров, компонент <b-form-select>
(который является встроенным в HTML5 <select>
) будет отображаться в не выбранное состояние. В iOS это приведет к тому, что пользователь не сможет выбрать первый элемент, потому что iOS в этом случае не запускает событие изменения. Поэтому рекомендуется в качестве первого варианта указать отключенный параметр с пустым значением.
<b-form-select v-model="selected" :options="options">
<template #first>
<b-form-select-option value="" disabled>-- Пожалуйста, выберите опцию --</b-form-select-option>
</template>
</b-form-select>
Дополнительную информацию смотрите в документации Vue select.
Стандартный (одиночный) выбор
По умолчанию применяется настраиваемый стиль выбора Bootstrap v4.
Значение в одиночном режиме
В режиме, отличном от multiple
, <b-form-select>
возвращает единственное value
текущей выбранной опции.
<template>
<div>
<b-form-select v-model="selected" :options="options"></b-form-select>
<div class="mt-3">Выбрано: <strong></strong></div>
</div>
</template>
<script>
export default {
data() {
return {
selected: null,
options: [
{ value: null, text: 'Пожалуйста, выберите какой-нибудь элемент' },
{ value: 'a', text: 'Это первая опция' },
{ value: 'b', text: 'Выбранная опция по умолчанию' },
{ value: 'c', text: 'Это другая опция' },
{ value: 'd', text: 'Эта одна отключена', disabled: true }
]
}
}
}
</script>
Размеры селекта (отображаемые строки)
Вы можете использовать свойство select-size
, чтобы переключить пользовательский выбор в список выбора, а не в раскрывающийся список. Установите для свойства select-size
числовое значение больше 1, чтобы контролировать количество видимых строк параметров.
Обратите внимание, когда для параметра select-size
установлено значение больше 1, пользовательский стиль Bootstrap v4 не будет применяться, если также не установлено свойство multiple
.
Обратите внимание, что не все мобильные браузеры отображают выбор в виде списка.
<template>
<div>
<b-form-select v-model="selected" :options="options" :select-size="4"></b-form-select>
<div class="mt-3">Выбрано: <strong></strong></div>
</div>
</template>
<script>
export default {
data() {
return {
selected: null,
options: [
{ value: null, text: 'Пожалуйста, выберите какой-нибудь элемент' },
{ value: 'a', text: 'Это Опция a' },
{ value: 'b', text: 'Выбранная опция b по умолчанию' },
{ value: 'c', text: 'Это Опция c' },
{ value: 'd', text: 'Эта одна отключена', disabled: true },
{ value: 'e', text: 'Это Опция e' },
{ value: 'e', text: 'Это Опция f' }
]
}
}
}
</script>
Поддержка множественного выбора
Включите режим множественного выбора, установив свойство multiple
, и управляйте количеством строк, отображаемых в списке множественного выбора, установив select-size
равным количеству отображаемых строк. По умолчанию браузер использует значение по умолчанию (обычно 4).
Значение в режиме множественного выбора
В режиме multiple
, <b-form-select>
всегда возвращает массив значений параметров. Вы должны предоставить ссылку на массив в качестве v-model
в режиме multiple
.
<template>
<div>
<b-form-select v-model="selected" :options="options" multiple :select-size="4"></b-form-select>
<div class="mt-3">Выбрано: <strong></strong></div>
</div>
</template>
<script>
export default {
data() {
return {
selected: ['b'],
options: [
{ value: 'a', text: 'Это первая опция' },
{ value: 'b', text: 'Выбранная опция по умочланию' },
{ value: 'c', text: 'Это другая опция' },
{ value: 'd', text: 'Эта одна отключена', disabled: true },
{ value: 'e', text: 'Это опция e' },
{ value: 'f', text: 'Это опция f' },
{ value: 'g', text: 'Это опция g' }
]
}
}
}
</script>
Размер контролов
Установите размер текста элемента управления формой, используя свойство size
равное sm
или lg
для малых или больших соответственно.
По умолчанию <b-form-select>
будет занимать всю ширину контейнера, в котором он появляется. Чтобы контролировать ширину выбора, поместите ввод внутри стандартного столбца сетки Bootstrap.
Автофокус
Когда свойство autofocus
установлено на <b-form-select>
, выделение будет автоматически сфокусировано, когда оно вставлено (т.е. mounted) в документ или повторно активировано, когда оно находится внутри компонента Vue <keep-alive>
. Обратите внимание, что эта опция не устанавливает атрибут autofocus
для выбора и не может сказать, когда выбор становится видимым.
Контекстные состояния
Bootstrap включает стили проверки valid
и invalid
состояний для большинства элементов управления формой.
Вообще говоря, вы захотите использовать определенное состояние для определенных типов обратной связи:
false
(обозначает недопустимое состояние) отлично подходит, когда есть блокирующее или обязательное поле. Пользователь должен правильно заполнить это поле, чтобы отправить форму. true
(обозначает допустимое состояние) идеально подходит для ситуаций, когда у вас есть проверка по каждому полю во всей форме и вы хотите побудить пользователя пройти через остальные поля. null
Не отображает состояние проверки (ни действительное, ни недействительное)
Чтобы применить один из значков контекстного состояния к <b-form-select>
, установите для свойства state
значение false
(для недопустимого), true
(для действительного) или null
(состояние проверки отсутствует).
Передача состояния контекстной проверки вспомогательным технологиям и пользователям с дальтонизмом
Использование этих контекстных состояний для обозначения состояния элемента управления формы обеспечивает только визуальную цветовую индикацию, которая не будет передана пользователям вспомогательных технологий, таких как программы чтения с экрана, или пользователям с дальтонизмом.
Убедитесь, что также имеется альтернативная индикация состояния. Например, вы можете включить подсказку о состоянии в самом тексте элемента управления формы <label>
или предоставив дополнительный блок текста справки (через <b-form-group>
или <b-form-*-feedback>
). В частности, для вспомогательных технологий недопустимым элементам управления формой также может быть назначен атрибут aria-invalid="true"
(смотрите ниже).
Атрибут ARIA aria-invalid
Когда <b-form-select>
имеет недопустимое контекстное состояние (например, state = false
), вы также можете установить для <b-form-select>
свойства aria-invalid
значение true
.
Поддерживаемые invalid
значения:
false
(по умолчанию) Ошибок не обнаружено true
Значение не прошло проверку
Когда для параметра state
установлено значение false
, для параметра aria-invalid также будет установлено значение true.
Не кастомный селект
Задайте для свойства plain
свойство рендеринга <select>
в собственном браузере (хотя класс .form-control
всегда будет помещен в выделение).
plain
выбор всегда будет отображаться для не multiple
селектов, для которых свойство select-size
установлено на значение больше 1.