Индивидуальные радио
<template>
<div>
<b-form-group label="Индивидуальные радио" v-slot="{ ariaDescribedby }">
<b-form-radio v-model="selected" :aria-describedby="ariaDescribedby" name="some-radios" value="A">Option A</b-form-radio>
<b-form-radio v-model="selected" :aria-describedby="ariaDescribedby" name="some-radios" value="B">Option B</b-form-radio>
</b-form-group>
<div class="mt-3">Selected: <strong></strong></div>
</div>
</template>
<script>
export default {
data() {
return {
selected: ''
}
}
}
</script>
Сгруппированные радио
Отдельные радио-вводы в <b-form-radio-group> могут быть указаны с помощью свойства options или путем ручного размещения подкомпонента <b-form-radio>. При использовании вручную размещенных компонентов <b-form-radio> внутри <b-form-radio-group>, они унаследуют большинство свойств и v-model от <b-form-radio-group>.
<template>
<div>
<b-form-group label="Radios using options" v-slot="{ ariaDescribedby }">
<b-form-radio-group
id="radio-group-1"
v-model="selected"
:options="options"
:aria-describedby="ariaDescribedby"
name="radio-options"
></b-form-radio-group>
</b-form-group>
<b-form-group label="Radios using sub-components" v-slot="{ ariaDescribedby }">
<b-form-radio-group
id="radio-group-2"
v-model="selected"
:aria-describedby="ariaDescribedby"
name="radio-sub-component"
>
<b-form-radio value="first">Toggle this custom radio</b-form-radio>
<b-form-radio value="second">Or toggle this other custom radio</b-form-radio>
<b-form-radio value="third" disabled>This one is Disabled</b-form-radio>
<b-form-radio :value="{ fourth: 4 }">This is the 4th radio</b-form-radio>
</b-form-radio-group>
</b-form-group>
<div class="mt-3">Selected: <strong></strong></div>
</div>
</template>
<script>
export default {
data() {
return {
selected: 'first',
options: [
{ text: 'Toggle this custom radio', value: 'first' },
{ text: 'Or toggle this other custom radio', value: 'second' },
{ text: 'This one is Disabled', value: 'third', disabled: true },
{ text: 'This is the 4th radio', value: { fourth: 4 } }
]
}
}
}
</script>
Не стесняйтесь комбинировать и сопоставлять свойство options и <b-form-radio> в <b-form-radio-group>. Помещенные вручную вводы <b-form-radio> будут появляться под любыми радио-вводами, сгенерированными свойством options. Чтобы они отображались выше входов, созданных с помощью options, поместите их в именованный слот first.
<template>
<div>
<b-form-group label="Radios using options and slots" v-slot="{ ariaDescribedby }">
<b-form-radio-group
id="radio-slots"
v-model="selected"
:options="options"
:aria-describedby="ariaDescribedby"
name="radio-options-slots"
>
<template #first>
<b-form-radio value="first">Toggle this custom radio from slot first</b-form-radio>
</template>
<b-form-radio :value="{ fourth: 4 }">This is the 4th radio</b-form-radio>
<b-form-radio value="fifth">This is the 5th radio</b-form-radio>
</b-form-radio-group>
</b-form-group>
<div class="mt-3">Selected: <strong></strong></div>
</div>
</template>
<script>
export default {
data() {
return {
selected: '',
options: [
{ text: 'Or toggle this other custom radio', value: 'second' },
{ text: 'Third radio', value: 'third' }
]
}
}
}
</script>
Массив опций радиогруппы
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: 'Item 1', value: 'first' },
{ text: 'Item 2', value: 'second' },
{ html: '<b>Item</b> 3', value: 'third', disabled: true },
{ text: 'Item 4' },
{ text: 'Item 5', value: { foo: 'bar', baz: true } }
]Если value отсутствует, то text будет использоваться как полей value и text. Если вы используете свойство html, вы должны предоставить свойство value.
Внутри BootstrapVue преобразует указанный выше массив в следующий формат (формат массив объектов):
const options = [
{ text: 'Item 1', value: 'first', disabled: false },
{ text: 'Item 2', value: 'second', disabled: false },
{ html: '<b>Item</b> 3', value: 'third', disabled: true },
{ text: 'Item 4', value: 'Item 4', disabled: false },
{ text: 'Item 5', value: 'E', disabled: false }
]Изменение названий полей опций
Если вы хотите настроить имена свойств поля (например, используя поле name для отображения text), вы можете легко изменить их, установив text-field, html-field, value-field и disabled-field прописывает строку, содержащую имя свойства, которое вы хотели бы использовать:
<template>
<div>
<b-form-radio-group
v-model="selected"
:options="options"
class="mb-3"
value-field="item"
text-field="name"
disabled-field="notEnabled"
></b-form-radio-group>
<div class="mt-3">Выбранное: <strong></strong></div>
</div>
</template>
<script>
export default {
data() {
return {
selected: 'A',
options: [
{ item: 'A', name: 'Option A' },
{ item: 'B', name: 'Option B' },
{ item: 'D', name: 'Option C', notEnabled: true },
{ item: { d: 1 }, name: 'Option D' }
]
}
}
}
</script>
Значение радио и v-model
Компоненты <b-form-radio> не имеют значения по умолчанию. Вы должны явно указать значение через свойство value в <b-form-radio>. Это значение будет отправлено в v-model, когда радио будет проверено.
v-model как <b-form-radio>, так и <b-form-radio-group> привязывается к свойству checked. Чтобы предварительно проверить радио, вы должны установить значение v-model равным одному из значений радио (т.е. должно соответствовать значению, указанному в одном из параметра value). Не используйте свойство checked напрямую. Каждый радиомодуль в радиогруппе должен иметь уникальное значение.
Радио поддерживают значения многих типов, такие как string, boolean, number или простой object.
Инлайновые и стековые радио
По умолчанию <b-form-radio-group> генерирует встроенные радио, а <b-form-radio> генерирует сложенные радио. Установите свойство stacked на <b-form-radio-group>, чтобы радиостанции появлялись одно над другим, или при использовании радиостанций не в группе, установите свойство inline на b-form-radio значение true, чтобы сделать их встроенными.
<template>
<div>
<b-form-group label="Inline radios (default)" v-slot="{ ariaDescribedby }">
<b-form-radio-group
v-model="selected"
:options="options"
:aria-describedby="ariaDescribedby"
name="radio-inline"
></b-form-radio-group>
</b-form-group>
<b-form-group label="Stacked radios" v-slot="{ ariaDescribedby }">
<b-form-radio-group
v-model="selected"
:options="options"
:aria-describedby="ariaDescribedby"
name="radios-stacked"
stacked
></b-form-radio-group>
</b-form-group>
<div class="mt-3">Selected: <strong></strong></div>
</div>
</template>
<script>
export default {
data() {
return {
selected: 'first',
options: [
{ text: 'First radio', value: 'first' },
{ text: 'Second radio', value: 'second' },
{ text: 'Third radio', value: 'third' }
]
}
}
}
</script>
Размеры элементов
Используйте опцию size для управления размером радио. Размер по умолчанию - средний. Поддерживаемые значения размера: sm (маленький) и lg (большой).
<div>
<b-form-radio name="radio-size" size="sm">Маленький</b-form-radio>
<b-form-radio name="radio-size">По умолчанию</b-form-radio>
<b-form-radio name="radio-size" size="lg">Большой</b-form-radio>
</div>
Размеры могут быть заданы для отдельных компонентов <b-form-radio> или унаследованы от параметра size в <b-form-radio-group>.
Примечание: Bootstrap v4.x изначально не поддерживает размеры для настраиваемых элементов управления радио. Однако BootstrapVue включает настраиваемый SCSS/CSS, который добавляет поддержку для изменения размера настраиваемых радио.
Радио кнопочного типа
Визуализируйте радио как кнопки, установив для свойства buttons значение true в <b-form-radio-group>. Установите вариант кнопки, установив для свойства button-variant один из стандартных вариантов кнопки Bootstrap (смотрите <b-button> для поддерживаемых вариантов). По умолчанию button-variant является secondary.
Свойство buttons имеет приоритет над plain, а button-variant не имеет никакого эффекта, если buttons не установлено.
Радио в стиле кнопки будут иметь класс .active, автоматически примененный к их метке, когда они находятся в отмеченном состоянии.
<template>
<div>
<b-form-group label="Button style radios" v-slot="{ ariaDescribedby }">
<b-form-radio-group
id="btn-radios-1"
v-model="selected"
:options="options"
:aria-describedby="ariaDescribedby"
name="radios-btn-default"
buttons
></b-form-radio-group>
</b-form-group>
<b-form-group
label="Button style radios with outline-primary variant and size lg"
v-slot="{ ariaDescribedby }"
>
<b-form-radio-group
id="btn-radios-2"
v-model="selected"
:options="options"
:aria-describedby="ariaDescribedby"
button-variant="outline-primary"
size="lg"
name="radio-btn-outline"
buttons
></b-form-radio-group>
</b-form-group>
<b-form-group label="Stacked button style radios" v-slot="{ ariaDescribedby }">
<b-form-radio-group
id="btn-radios-3"
v-model="selected"
:options="options"
:aria-describedby="ariaDescribedby"
name="radio-btn-stacked"
buttons
stacked
></b-form-radio-group>
</b-form-group>
</div>
</template>
<script>
export default {
data() {
return {
selected: 'radio1',
options: [
{ text: 'Radio 1', value: 'radio1' },
{ text: 'Radio 3', value: 'radio2' },
{ text: 'Radio 3 (disabled)', value: 'radio3', disabled: true },
{ text: 'Radio 4', value: 'radio4' }
]
}
}
}
</script>
Радиовводы нестандартного стиля (простые)
Вы можете сделать так, чтобы <b-form-radio> и <b-form-radio-group> отображали радио-ввод в собственном стиле браузера, установив свойство plain.
<template>
<div>
<b-form-group label="Plain inline radios" v-slot="{ ariaDescribedby }">
<b-form-radio-group
v-model="selected"
:options="options"
:aria-describedby="ariaDescribedby"
name="plain-inline"
plain
></b-form-radio-group>
</b-form-group>
<b-form-group label="Plain stacked radios" v-slot="{ ariaDescribedby }">
<b-form-radio-group
v-model="selected"
:options="options"
:aria-describedby="ariaDescribedby"
name="plain-stacked"
plain
stacked
></b-form-radio-group>
</b-form-group>
</div>
</template>
<script>
export default {
data() {
return {
selected: 'first',
options: [
{ text: 'First radio', value: 'first' },
{ text: 'Second radio', value: 'second' },
{ text: 'Third radio', value: 'third' }
]
}
}
}
</script>
Примечание: plain не будет иметь никакого эффекта, если установлено buttons/button.
Требуемое ограничение
При использовании отдельных компонентов <b-form-radio> (не в <b-form-radio-group>), и вы хотите, чтобы радио были required в вашей форме, вы должен предоставлять name для каждого <b-form-radio> для того, чтобы требуемое ограничение работало. Все компоненты <b-form-radio>, связанные с одной и той же v-model, должны иметь одинаковое name.
name требуется для того, чтобы вспомогательные технологии (такие как программы чтения с экрана и пользователи, использующие только клавиатуру) могли знать, какие радиостанции принадлежат одной и той же переменной формы (имя также автоматически включает встроенную навигацию с клавиатуры браузера), поэтому required будет только работать, если установлено name. <b-form-radio-group> автоматически сгенерирует уникальное имя входа, если оно не указано в группе.
Автофокус
Когда свойство autofocus установлено на <b-form-radio>, вход будет автоматически сфокусирован, когда он вставлен (т.е. установлен) в документ или повторно активирован, когда он находится внутри компонента Vue <keep-alive>. Обратите внимание, что это свойство не устанавливает атрибут autofocus на входе и не может сказать, когда ввод становится видимым.
Контекстные состояния
Bootstrap включает стили проверки valid и invalid состояний для большинства элементов управления формой.
Вообще говоря, вы захотите использовать определенное состояние для определенных типов обратной связи:
false (обозначает недопустимое состояние) отлично подходит, когда есть блокирующее или обязательное поле. Пользователь должен правильно заполнить это поле, чтобы отправить форму. true (обозначает действительное состояние) идеально подходит для ситуаций, когда у вас есть проверка по каждому полю во всей форме и вы хотите поощрить пользователя через остальные поля. null Не отображает состояние проверки (ни действительное, ни недействительное)
Чтобы применить один из значков контекстного состояния на <b-form-radio>, установите для свойства state значение false (для недопустимого), true (для допустимого) или null (состояние проверки отсутствует).
Примечание: Контекстное состояние не поддерживается для радиостанций, отображаемых в режиме кнопок.
Контекстное состояние с примером обратной связи
<template>
<div>
<b-form-radio-group v-model="value" :options="options" :state="state" name="radio-validation">
<b-form-invalid-feedback :state="state">Пожалуйста, выберите один</b-form-invalid-feedback>
<b-form-valid-feedback :state="state">Спасибо</b-form-valid-feedback>
</b-form-radio-group>
</div>
</template>
<script>
export default {
data() {
return {
value: null,
options: [
{ text: 'Первое радио', value: 'first' },
{ text: 'Второе радио', value: 'second' },
{ text: 'Третье радио', value: 'third' }
]
}
},
computed: {
state() {
return Boolean(this.value)
}
}
}
</script>
Передача состояния контекстной проверки вспомогательным технологиям и пользователям с дальтонизмом
Использование этих контекстных состояний для обозначения состояния элемента управления формы обеспечивает только визуальную цветовую индикацию, которая не будет передана пользователям вспомогательных технологий, таких как программы чтения с экрана, или пользователям с дальтонизмом.
Убедитесь, что также имеется альтернативная индикация состояния. Например, вы можете включить подсказку о состоянии в самом тексте элемента управления формой <label> или путем предоставления дополнительного текстового блока справки (например, <b-form-invalid-feedback>). В частности, для вспомогательных технологий недопустимым элементам управления формой также может быть назначен атрибут aria-invalid="true" (смотрите ниже).
Атрибут ARIA aria-invalid
Когда <b-form-radio-group> имеет недопустимое контекстное состояние (т.е. state = false), вам также может потребоваться для установки <b-form-radio-group> свойства aria-invalid значение true.
Поддерживаемые значения aria-invalid:
false (по умолчанию) Ошибок не обнаружено true Значение не прошло проверку.
aria-invalid автоматически устанавливается в true, если свойство state имеет значение false.