组件关系 ​
请放入 单选组 使用,模型由组管理。希望通过 options 自动生成按钮时使用 单选集合 的 type="button"。
使用场景 ​
通过 value 定义单项身份,default 插槽定义显示内容;放入对应 Group 统一维护选择。 与自动消费 options 的 Radio 集合入口分开。
组合与双向绑定 ​
单项使用 value;label 用于显示或可访问说明,不依赖旧 label 充当选择值。禁用项无法更改。
组合与双向绑定
<template>
<div class="example">
<AsamRadioGroup v-model="value">
<AsamRadioButton value="design"> 设计 </AsamRadioButton>
<AsamRadioButton value="dev"> 开发 </AsamRadioButton>
<AsamRadioButton value="off" disabled> 停用 </AsamRadioButton>
</AsamRadioGroup>
<output>选择:{{ value }}</output>
</div>
</template>
<script lang="ts" setup>
defineOptions({ name: 'AsamRadioButtonBasicExample' });
import { ref } from 'vue';
import { AsamRadioGroup, AsamRadioButton } from '@asam-ui/ui';
const value = ref('design');
</script>
<style scoped>
.example {
display: grid;
gap: var(--asam-space-md, 16px);
min-width: 0;
}
.row {
display: flex;
flex-wrap: wrap;
align-items: center;
gap: var(--asam-space-sm, 8px);
}
.density-grid {
display: grid;
gap: var(--asam-space-md, 16px);
grid-template-columns: repeat(auto-fit, minmax(min(100%, 260px), 1fr));
}
section {
display: grid;
gap: var(--asam-space-sm, 8px);
min-width: 0;
}
output {
overflow-wrap: anywhere;
color: var(--asam-color-text-secondary);
}
</style>
<template>
<div class="example">
<AsamRadioGroup v-model="value">
<AsamRadioButton value="design"> 设计 </AsamRadioButton>
<AsamRadioButton value="dev"> 开发 </AsamRadioButton>
<AsamRadioButton value="off" disabled> 停用 </AsamRadioButton>
</AsamRadioGroup>
<output>选择:{{ value }}</output>
</div>
</template>
<script setup>
defineOptions({ name: 'AsamRadioButtonBasicExample' });
import { ref } from 'vue';
import { AsamRadioGroup, AsamRadioButton } from '@asam-ui/ui';
const value = ref('design');
</script>
<style scoped>
.example {
display: grid;
gap: var(--asam-space-md, 16px);
min-width: 0;
}
.row {
display: flex;
flex-wrap: wrap;
align-items: center;
gap: var(--asam-space-sm, 8px);
}
.density-grid {
display: grid;
gap: var(--asam-space-md, 16px);
grid-template-columns: repeat(auto-fit, minmax(min(100%, 260px), 1fr));
}
section {
display: grid;
gap: var(--asam-space-sm, 8px);
min-width: 0;
}
output {
overflow-wrap: anywhere;
color: var(--asam-color-text-secondary);
}
</style>
禁用与组内覆盖 ​
组 disabled 控制组内选择,子项显式 size 可覆盖组内继承。按钮项的 fill/textColor 由 Group 配置。
禁用与组内覆盖
<template>
<div class="example">
<AsamRadioGroup v-model="value" size="big" :disabled="disabled">
<AsamRadioButton value="design"> 继承 big </AsamRadioButton>
<AsamRadioButton value="dev" size="small"> 覆盖 small </AsamRadioButton>
</AsamRadioGroup>
<AsamButton type="default" @click="disabled = !disabled"> 切换组禁用 </AsamButton>
<output>选中:{{ value }};组禁用:{{ disabled }}</output>
</div>
</template>
<script lang="ts" setup>
defineOptions({ name: 'AsamRadioButtonStatesExample' });
import { ref } from 'vue';
import { AsamRadioGroup, AsamRadioButton, AsamButton } from '@asam-ui/ui';
const value = ref('design');
const disabled = ref(false);
</script>
<style scoped>
.example {
display: grid;
gap: var(--asam-space-md, 16px);
min-width: 0;
}
.row {
display: flex;
flex-wrap: wrap;
align-items: center;
gap: var(--asam-space-sm, 8px);
}
.density-grid {
display: grid;
gap: var(--asam-space-md, 16px);
grid-template-columns: repeat(auto-fit, minmax(min(100%, 260px), 1fr));
}
section {
display: grid;
gap: var(--asam-space-sm, 8px);
min-width: 0;
}
output {
overflow-wrap: anywhere;
color: var(--asam-color-text-secondary);
}
</style>
<template>
<div class="example">
<AsamRadioGroup v-model="value" size="big" :disabled="disabled">
<AsamRadioButton value="design"> 继承 big </AsamRadioButton>
<AsamRadioButton value="dev" size="small"> 覆盖 small </AsamRadioButton>
</AsamRadioGroup>
<AsamButton type="default" @click="disabled = !disabled"> 切换组禁用 </AsamButton>
<output>选中:{{ value }};组禁用:{{ disabled }}</output>
</div>
</template>
<script setup>
defineOptions({ name: 'AsamRadioButtonStatesExample' });
import { ref } from 'vue';
import { AsamRadioGroup, AsamRadioButton, AsamButton } from '@asam-ui/ui';
const value = ref('design');
const disabled = ref(false);
</script>
<style scoped>
.example {
display: grid;
gap: var(--asam-space-md, 16px);
min-width: 0;
}
.row {
display: flex;
flex-wrap: wrap;
align-items: center;
gap: var(--asam-space-sm, 8px);
}
.density-grid {
display: grid;
gap: var(--asam-space-md, 16px);
grid-template-columns: repeat(auto-fit, minmax(min(100%, 260px), 1fr));
}
section {
display: grid;
gap: var(--asam-space-sm, 8px);
min-width: 0;
}
output {
overflow-wrap: anywhere;
color: var(--asam-color-text-secondary);
}
</style>
四档尺寸与上下文继承 ​
四个实例分别显式使用 large、big、default、small。下面省略 size 的实例随 ConfigProvider 响应切换;显式 size 覆盖祖先。面板本身没有 size 契约的入口不附加虚构尺寸属性。
四档尺寸与上下文继承
<template>
<div class="example">
<div class="density-grid">
<section data-density="large">
<strong> large </strong>
<AsamRadioGroup v-model="value" size="large">
<AsamRadioButton value="design"> 设计 </AsamRadioButton>
<AsamRadioButton value="dev"> 开发 </AsamRadioButton>
<AsamRadioButton value="off" disabled> 停用 </AsamRadioButton>
</AsamRadioGroup>
</section>
<section data-density="big">
<strong> big </strong>
<AsamRadioGroup v-model="value" size="big">
<AsamRadioButton value="design"> 设计 </AsamRadioButton>
<AsamRadioButton value="dev"> 开发 </AsamRadioButton>
<AsamRadioButton value="off" disabled> 停用 </AsamRadioButton>
</AsamRadioGroup>
</section>
<section data-density="default">
<strong> default </strong>
<AsamRadioGroup v-model="value" size="default">
<AsamRadioButton value="design"> 设计 </AsamRadioButton>
<AsamRadioButton value="dev"> 开发 </AsamRadioButton>
<AsamRadioButton value="off" disabled> 停用 </AsamRadioButton>
</AsamRadioGroup>
</section>
<section data-density="small">
<strong> small </strong>
<AsamRadioGroup v-model="value" size="small">
<AsamRadioButton value="design"> 设计 </AsamRadioButton>
<AsamRadioButton value="dev"> 开发 </AsamRadioButton>
<AsamRadioButton value="off" disabled> 停用 </AsamRadioButton>
</AsamRadioGroup>
</section>
</div>
<AsamConfigProvider :size="density">
<section data-density="inherited">
<AsamRadioGroup v-model="value">
<AsamRadioButton value="design"> 设计 </AsamRadioButton>
<AsamRadioButton value="dev"> 开发 </AsamRadioButton>
<AsamRadioButton value="off" disabled> 停用 </AsamRadioButton>
</AsamRadioGroup>
</section>
</AsamConfigProvider>
<div class="row">
<AsamButton type="default" @click="density = 'small'"> 继承 small </AsamButton>
<AsamButton type="default" @click="density = 'big'"> 继承 big </AsamButton>
</div>
<output>配置提供器:{{ density }}</output>
</div>
</template>
<script lang="ts" setup>
defineOptions({ name: 'AsamRadioButtonSizesExample' });
import { ref } from 'vue';
import { AsamRadioGroup, AsamRadioButton, AsamConfigProvider, AsamButton } from '@asam-ui/ui';
import type { AsamControlSize } from '@asam-ui/ui';
const density = ref<AsamControlSize>('big');
const value = ref('design');
</script>
<style scoped>
.example {
display: grid;
gap: var(--asam-space-md, 16px);
min-width: 0;
}
.row {
display: flex;
flex-wrap: wrap;
align-items: center;
gap: var(--asam-space-sm, 8px);
}
.density-grid {
display: grid;
gap: var(--asam-space-md, 16px);
grid-template-columns: repeat(auto-fit, minmax(min(100%, 260px), 1fr));
}
section {
display: grid;
gap: var(--asam-space-sm, 8px);
min-width: 0;
}
output {
overflow-wrap: anywhere;
color: var(--asam-color-text-secondary);
}
</style>
<template>
<div class="example">
<div class="density-grid">
<section data-density="large">
<strong> large </strong>
<AsamRadioGroup v-model="value" size="large">
<AsamRadioButton value="design"> 设计 </AsamRadioButton>
<AsamRadioButton value="dev"> 开发 </AsamRadioButton>
<AsamRadioButton value="off" disabled> 停用 </AsamRadioButton>
</AsamRadioGroup>
</section>
<section data-density="big">
<strong> big </strong>
<AsamRadioGroup v-model="value" size="big">
<AsamRadioButton value="design"> 设计 </AsamRadioButton>
<AsamRadioButton value="dev"> 开发 </AsamRadioButton>
<AsamRadioButton value="off" disabled> 停用 </AsamRadioButton>
</AsamRadioGroup>
</section>
<section data-density="default">
<strong> default </strong>
<AsamRadioGroup v-model="value" size="default">
<AsamRadioButton value="design"> 设计 </AsamRadioButton>
<AsamRadioButton value="dev"> 开发 </AsamRadioButton>
<AsamRadioButton value="off" disabled> 停用 </AsamRadioButton>
</AsamRadioGroup>
</section>
<section data-density="small">
<strong> small </strong>
<AsamRadioGroup v-model="value" size="small">
<AsamRadioButton value="design"> 设计 </AsamRadioButton>
<AsamRadioButton value="dev"> 开发 </AsamRadioButton>
<AsamRadioButton value="off" disabled> 停用 </AsamRadioButton>
</AsamRadioGroup>
</section>
</div>
<AsamConfigProvider :size="density">
<section data-density="inherited">
<AsamRadioGroup v-model="value">
<AsamRadioButton value="design"> 设计 </AsamRadioButton>
<AsamRadioButton value="dev"> 开发 </AsamRadioButton>
<AsamRadioButton value="off" disabled> 停用 </AsamRadioButton>
</AsamRadioGroup>
</section>
</AsamConfigProvider>
<div class="row">
<AsamButton type="default" @click="density = 'small'"> 继承 small </AsamButton>
<AsamButton type="default" @click="density = 'big'"> 继承 big </AsamButton>
</div>
<output>配置提供器:{{ density }}</output>
</div>
</template>
<script setup>
defineOptions({ name: 'AsamRadioButtonSizesExample' });
import { ref } from 'vue';
import { AsamRadioGroup, AsamRadioButton, AsamConfigProvider, AsamButton } from '@asam-ui/ui';
const density = ref('big');
const value = ref('design');
</script>
<style scoped>
.example {
display: grid;
gap: var(--asam-space-md, 16px);
min-width: 0;
}
.row {
display: flex;
flex-wrap: wrap;
align-items: center;
gap: var(--asam-space-sm, 8px);
}
.density-grid {
display: grid;
gap: var(--asam-space-md, 16px);
grid-template-columns: repeat(auto-fit, minmax(min(100%, 260px), 1fr));
}
section {
display: grid;
gap: var(--asam-space-sm, 8px);
min-width: 0;
}
output {
overflow-wrap: anywhere;
color: var(--asam-color-text-secondary);
}
</style>
ASAM 扩展与迁移 ​
ASAM 扩展为四档 size 和组内上下文继承。default 插槽只负责展示。Item、Button、Group 不提供实例方法,不能调用集合或输入组件的 focus。事件及当前可用属性以下方实际公开类型为准。
API 阅读方式 ​
下方 Props、Events、Slots、Exposes 按当前实际公开类型与运行默认值生成。组合属性按分支生效,不能任意混搭值模式。标为“未知 / 未声明”的默认值不代表 false 或空值。源码区域提供对应语言的独立 Demo.vue,可直接复制或下载;本地辅助组件、数据和素材已内联到当前文件。
基础公开委托 ​
透传基础控件的公开能力,保留 ASAM 四档尺寸与品牌样式。 完整说明。
API
属性 AsamRadioButtonProps
| 属性名 | 说明 | 类型 | 默认值 |
|---|---|---|---|
disabled | 是否禁用单选框 | (AsamRadioButtonProps)["disabled"] | undefined |
name | 原生 name 属性 | string | undefined | undefined |
value | 单选框的值 | (AsamRadioButtonProps)["value"] | undefined |
modelValue | — | (AsamRadioButtonProps)["modelValue"] | undefined |
label | 单选框的 label 如果没有 value, label则作为value使用 | (AsamRadioButtonProps)["label"] | undefined |
size | — | enum"large" | "big" | "default" | "small"完整类型:AsamControlSize | undefined | undefined |
插槽 AsamRadioButtonSlots
| 属性名 | 说明 | 类型 | 默认值 |
|---|---|---|---|
default | — | (() => unknown) | undefined | — |
实例方法与状态 AsamRadioButtonExpose
用法与契约补充说明 ​
基础公开委托 ​
本入口直接委托底层依赖 2.14.7 对应组件的公开能力;公开 props/defaults、全部事件实参与插槽保持原生行为,仅增加 ASAM 四档尺寸与品牌样式。需要规范化 options、对象或字符串存储时使用本站 AsamRadio / AsamCheckbox 聚合入口。组内 Button 由原生样式处理首中尾连接、选中、禁用、焦点与键盘。
关联组件
参数与事件补充说明
完整透传 2.14.7 的基础参数,并在适用时使用 ASAM 尺寸密度。
参数与事件说明
disabled
必填:否;声明来源:上游声明。
disabled 参数与事件数据
下列为声明可读视图;可导入类型以公开类型视图为准。分支条件与父属性一致。
枚举:false / true
默认值与来源
undefined(已安装运行时;已安装组件)name
必填:否;声明来源:上游声明。
默认值与来源
undefined(已安装运行时;已安装组件)value
必填:否;声明来源:上游声明。
value 参数与事件数据
下列为声明可读视图;可导入类型以公开类型视图为准。分支条件与父属性一致。
枚举:false / true
默认值与来源
undefined(已安装运行时;已安装组件)modelValue
必填:否;声明来源:上游声明。
modelValue 参数与事件数据
下列为声明可读视图;可导入类型以公开类型视图为准。分支条件与父属性一致。
枚举:false / true
默认值与来源
undefined(已安装运行时;已安装组件)label
必填:否;声明来源:上游声明。
label 参数与事件数据
下列为声明可读视图;可导入类型以公开类型视图为准。分支条件与父属性一致。
枚举:false / true
默认值与来源
undefined(已安装运行时;已安装组件)size
必填:否;声明来源:ASAM 声明。
size 参数与事件数据
下列为声明可读视图;可导入类型以公开类型视图为准。分支条件与父属性一致。
枚举:"large" / "big" / "default" / "small"
默认值与来源
undefined(源码表达式;ASAM 声明)AsamRadioButtonProps 公开类型视图
import type { AsamRadioButtonProps, AsamControlSize } from '@asam-ui/ui';
// AsamRadioButtonProps
type PublicContract = {
readonly "disabled"?: (AsamRadioButtonProps)["disabled"];
readonly "name"?: string | undefined;
readonly "value"?: (AsamRadioButtonProps)["value"];
readonly "modelValue"?: (AsamRadioButtonProps)["modelValue"];
readonly "label"?: (AsamRadioButtonProps)["label"];
"size"?: AsamControlSize | undefined;
};
参数与事件说明
default
必填:否;声明来源:ASAM 声明。
default 参数与事件数据
下列为声明可读视图;可导入类型以公开类型视图为准。分支条件与父属性一致。
事件参数:(): unknown
AsamRadioButtonSlots 公开类型视图
import type { AsamRadioButtonSlots } from '@asam-ui/ui';
// AsamRadioButtonSlots
type PublicContract = {
"default"?: (() => unknown) | undefined;
};
AsamRadioButtonExpose 公开类型视图
import type { AsamRadioButtonExpose } from '@asam-ui/ui';
// AsamRadioButtonExpose
type PublicContract = {
[key: string]: never;
};