单选组
使用方法
RadioGroup 是单选场景的容器组件,用来包裹一组互斥的 Radio 选项。它通过 provide/inject 把共享的 name、当前选中值和选择方法下发给每个子项,子项只需声明自己的 value 和 label:
vue
<script setup lang="ts">
import { Radio, RadioGroup } from '@astryx-vue/core/Radio'
import { shallowRef } from 'vue'
const size = shallowRef('md')
</script>
<template>
<RadioGroup v-model="size" label="Size">
<Radio value="sm" label="Small" />
<Radio value="md" label="Medium" />
<Radio value="lg" label="Large" />
</RadioGroup>
</template>示例
基本用法
Size
RadioGroup 统一持有当前选中值:点击任一选项,v-model 即随之更新,无需在子项上逐个绑定。
禁用选项
Disabled option
无论是通过 options 传入的选项,还是直接书写的 Radio 子项,都可以单独禁用,互不影响。
键盘与无障碍
RadioGroup 把一组互斥的选项组织成一个单选组,辅助技术会把它当成一个整体朗读,而不是若干个互不相关的按钮。下面这些语义和属性都由组件自动处理,你不需要手动声明。
- 整组渲染为一个
role="radiogroup"容器,屏幕阅读器按单选组语义朗读。 - 组标签通过
aria-labelledby与容器关联,所以必须提供组label,它就是整组的无障碍名称。 - 处于错误状态时,组会自动设置
aria-invalid。 - 设置
isRequired会显示必填提示,并启用原生必填校验。
键盘方面,组内所有选项共享同一个 name,浏览器会把它们当成同一组原生单选按钮:按 Tab 键进入这一组时会落在当前选中项上,之后用方向键在选项之间切换。
使用建议
下面两条建议用来帮你在 RadioGroup 和 RadioList 之间做选择。两者解决的问题相同——都是在一组互斥的选项里选出一个——区别只在于你对选项布局的控制程度。
- 需要自定义选项布局或渲染时,直接组合
RadioGroup和Radio子项。 - 选项结构简单、不需要定制布局时,改用 RadioList 会更省事。