组件关系 ​
用于手写多选组合,搭配 勾选项 或 按钮勾选项。直接传 options 时使用 多选集合。
使用场景 ​
通过 default 插槽组合多个选项并维护共享模型。 与自动消费 options 的 Checkbox 集合入口分开。
组合与双向绑定 ​
单项使用 value;label 用于显示或可访问说明,不依赖旧 label 充当选择值。禁用项无法更改。
组合与双向绑定
<template>
<div class="example">
<AsamCheckboxGroup v-model="value">
<AsamCheckboxItem value="design"> 设计 </AsamCheckboxItem>
<AsamCheckboxItem value="dev"> 开发 </AsamCheckboxItem>
<AsamCheckboxItem value="off" disabled> 停用 </AsamCheckboxItem>
</AsamCheckboxGroup>
<output>选择:{{ value }}</output>
</div>
</template>
<script lang="ts" setup>
defineOptions({ name: 'AsamCheckboxGroupBasicExample' });
import { ref } from 'vue';
import { AsamCheckboxGroup, AsamCheckboxItem } from '@asam-ui/ui';
const value = ref<string[]>(['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">
<AsamCheckboxGroup v-model="value">
<AsamCheckboxItem value="design"> 设计 </AsamCheckboxItem>
<AsamCheckboxItem value="dev"> 开发 </AsamCheckboxItem>
<AsamCheckboxItem value="off" disabled> 停用 </AsamCheckboxItem>
</AsamCheckboxGroup>
<output>选择:{{ value }}</output>
</div>
</template>
<script setup>
defineOptions({ name: 'AsamCheckboxGroupBasicExample' });
import { ref } from 'vue';
import { AsamCheckboxGroup, AsamCheckboxItem } 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">
<AsamCheckboxGroup v-model="value" :min="1" :max="2">
<AsamCheckboxItem value="design"> 设计 </AsamCheckboxItem>
<AsamCheckboxItem value="dev"> 开发 </AsamCheckboxItem>
<AsamCheckboxItem value="ops"> 运维 </AsamCheckboxItem>
</AsamCheckboxGroup>
<AsamCheckboxItem v-model="checked" :indeterminate="!checked">
独立勾选项
</AsamCheckboxItem>
<output>集合:{{ value }};独立:{{ checked }}</output>
</div>
</template>
<script lang="ts" setup>
defineOptions({ name: 'AsamCheckboxGroupStatesExample' });
import { ref } from 'vue';
import { AsamCheckboxGroup, AsamCheckboxItem } from '@asam-ui/ui';
const value = ref<string[]>(['design']);
const checked = 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">
<AsamCheckboxGroup v-model="value" :min="1" :max="2">
<AsamCheckboxItem value="design"> 设计 </AsamCheckboxItem>
<AsamCheckboxItem value="dev"> 开发 </AsamCheckboxItem>
<AsamCheckboxItem value="ops"> 运维 </AsamCheckboxItem>
</AsamCheckboxGroup>
<AsamCheckboxItem v-model="checked" :indeterminate="!checked">
独立勾选项
</AsamCheckboxItem>
<output>集合:{{ value }};独立:{{ checked }}</output>
</div>
</template>
<script setup>
defineOptions({ name: 'AsamCheckboxGroupStatesExample' });
import { ref } from 'vue';
import { AsamCheckboxGroup, AsamCheckboxItem } from '@asam-ui/ui';
const value = ref(['design']);
const checked = 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>
<AsamCheckboxGroup v-model="value" size="large">
<AsamCheckboxItem value="design"> 设计 </AsamCheckboxItem>
<AsamCheckboxItem value="dev"> 开发 </AsamCheckboxItem>
<AsamCheckboxItem value="off" disabled> 停用 </AsamCheckboxItem>
</AsamCheckboxGroup>
</section>
<section data-density="big">
<strong> big </strong>
<AsamCheckboxGroup v-model="value" size="big">
<AsamCheckboxItem value="design"> 设计 </AsamCheckboxItem>
<AsamCheckboxItem value="dev"> 开发 </AsamCheckboxItem>
<AsamCheckboxItem value="off" disabled> 停用 </AsamCheckboxItem>
</AsamCheckboxGroup>
</section>
<section data-density="default">
<strong> default </strong>
<AsamCheckboxGroup v-model="value" size="default">
<AsamCheckboxItem value="design"> 设计 </AsamCheckboxItem>
<AsamCheckboxItem value="dev"> 开发 </AsamCheckboxItem>
<AsamCheckboxItem value="off" disabled> 停用 </AsamCheckboxItem>
</AsamCheckboxGroup>
</section>
<section data-density="small">
<strong> small </strong>
<AsamCheckboxGroup v-model="value" size="small">
<AsamCheckboxItem value="design"> 设计 </AsamCheckboxItem>
<AsamCheckboxItem value="dev"> 开发 </AsamCheckboxItem>
<AsamCheckboxItem value="off" disabled> 停用 </AsamCheckboxItem>
</AsamCheckboxGroup>
</section>
</div>
<AsamConfigProvider :size="density">
<section data-density="inherited">
<AsamCheckboxGroup v-model="value">
<AsamCheckboxItem value="design"> 设计 </AsamCheckboxItem>
<AsamCheckboxItem value="dev"> 开发 </AsamCheckboxItem>
<AsamCheckboxItem value="off" disabled> 停用 </AsamCheckboxItem>
</AsamCheckboxGroup>
</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: 'AsamCheckboxGroupSizesExample' });
import { ref } from 'vue';
import { AsamCheckboxGroup, AsamCheckboxItem, AsamConfigProvider, AsamButton } from '@asam-ui/ui';
import type { AsamControlSize } from '@asam-ui/ui';
const density = ref<AsamControlSize>('big');
const value = ref<string[]>(['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>
<AsamCheckboxGroup v-model="value" size="large">
<AsamCheckboxItem value="design"> 设计 </AsamCheckboxItem>
<AsamCheckboxItem value="dev"> 开发 </AsamCheckboxItem>
<AsamCheckboxItem value="off" disabled> 停用 </AsamCheckboxItem>
</AsamCheckboxGroup>
</section>
<section data-density="big">
<strong> big </strong>
<AsamCheckboxGroup v-model="value" size="big">
<AsamCheckboxItem value="design"> 设计 </AsamCheckboxItem>
<AsamCheckboxItem value="dev"> 开发 </AsamCheckboxItem>
<AsamCheckboxItem value="off" disabled> 停用 </AsamCheckboxItem>
</AsamCheckboxGroup>
</section>
<section data-density="default">
<strong> default </strong>
<AsamCheckboxGroup v-model="value" size="default">
<AsamCheckboxItem value="design"> 设计 </AsamCheckboxItem>
<AsamCheckboxItem value="dev"> 开发 </AsamCheckboxItem>
<AsamCheckboxItem value="off" disabled> 停用 </AsamCheckboxItem>
</AsamCheckboxGroup>
</section>
<section data-density="small">
<strong> small </strong>
<AsamCheckboxGroup v-model="value" size="small">
<AsamCheckboxItem value="design"> 设计 </AsamCheckboxItem>
<AsamCheckboxItem value="dev"> 开发 </AsamCheckboxItem>
<AsamCheckboxItem value="off" disabled> 停用 </AsamCheckboxItem>
</AsamCheckboxGroup>
</section>
</div>
<AsamConfigProvider :size="density">
<section data-density="inherited">
<AsamCheckboxGroup v-model="value">
<AsamCheckboxItem value="design"> 设计 </AsamCheckboxItem>
<AsamCheckboxItem value="dev"> 开发 </AsamCheckboxItem>
<AsamCheckboxItem value="off" disabled> 停用 </AsamCheckboxItem>
</AsamCheckboxGroup>
</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: 'AsamCheckboxGroupSizesExample' });
import { ref } from 'vue';
import { AsamCheckboxGroup, AsamCheckboxItem, 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。事件及当前可用属性以下方实际公开类型为准。
自定义字段与自动渲染 ​
props 映射原始 options 的 value/label/disabled;Group 原始记录不要求 raw。 完整说明。
原始字段映射与数量边界
<template>
<div class="example">
<AsamCheckboxGroup
v-model="values"
:options="options"
:props="{ value: 'code', label: 'title', disabled: 'inactive' }"
type="button"
:min="1"
:max="2"
aria-label="自定义字段多选"
/>
<output>当前 codes:{{ values }}</output>
</div>
</template>
<script lang="ts" setup>
import { ref } from 'vue';
import { AsamCheckboxGroup } from '@asam-ui/ui';
const values = ref<string[]>(['design']);
const options = [
{ code: 'design', title: '设计' },
{ code: 'develop', title: '开发' },
{ code: 'off', title: '停用', inactive: true }
];
defineOptions({ name: 'AsamCheckboxGroupMappingDemo' });
</script>
<style scoped>
.example {
display: grid;
gap: var(--asam-space-md, 16px);
}
</style>
<template>
<div class="example">
<AsamCheckboxGroup
v-model="values"
:options="options"
:props="{ value: 'code', label: 'title', disabled: 'inactive' }"
type="button"
:min="1"
:max="2"
aria-label="自定义字段多选"
/>
<output>当前 codes:{{ values }}</output>
</div>
</template>
<script setup>
import { ref } from 'vue';
import { AsamCheckboxGroup } from '@asam-ui/ui';
const values = ref(['design']);
const options = [
{ code: 'design', title: '设计' },
{ code: 'develop', title: '开发' },
{ code: 'off', title: '停用', inactive: true }
];
defineOptions({ name: 'AsamCheckboxGroupMappingDemo' });
</script>
<style scoped>
.example {
display: grid;
gap: var(--asam-space-md, 16px);
}
</style>
API 阅读方式 ​
固定 2.14.7 源码已删除用于组无障碍名称的旧 label,改用 ariaLabel(模板中写 aria-label)。每项的 label 仍是显示内容,不用组的旧属性代替。
下方 Props、Events、Slots、Exposes 按当前实际公开类型与运行默认值生成。组合属性按分支生效,不能任意混搭值模式。标为“未知 / 未声明”的默认值不代表 false 或空值。源码区域提供对应语言的独立 Demo.vue,可直接复制或下载;本地辅助组件、数据和素材已内联到当前文件。
基础公开委托 ​
透传基础控件的公开能力,保留 ASAM 四档尺寸与品牌样式。 完整说明。
API
属性 AsamCheckboxGroupProps
| 属性名 | 说明 | 类型 | 默认值 |
|---|---|---|---|
ariaLabel | 原生 aria-label属性 | string | undefined | — |
disabled | 是否禁用 | (AsamCheckboxGroupProps)["disabled"] | undefined |
fill | 按钮形式的 Radio 激活时的填充色和边框色 | string | undefined | — |
type | 用于渲染选项的组件类型(例如 'button') | enum"button" | "checkbox"完整类型:(AsamCheckboxGroupProps)["type"] | "checkbox" |
props | options 的配置 | (AsamCheckboxGroupProps)["props"] | 工厂函数(每个实例创建) |
max | 可被勾选的 checkbox 的最大数量 | number | undefined | — |
modelValue | 选中项绑定值 | (AsamCheckboxGroupProps)["modelValue"] | 工厂函数(每个实例创建) |
tag | 复选框组元素标签 | string | undefined | "div" |
textColor | 按钮形式的 Radio 激活时的文本颜色 | string | undefined | — |
min | 可被勾选的 checkbox 的最小数量 | number | undefined | — |
options | 选项的数据源, value 的 key 和 label 和 disabled可以通过 props自定义. | (AsamCheckboxGroupProps)["options"] | — |
validateEvent | 是否触发表单验证 | (AsamCheckboxGroupProps)["validateEvent"] | true |
size | 多选框组尺寸 | enum"large" | "big" | "default" | "small"完整类型:AsamControlSize | undefined | undefined |
事件 AsamCheckboxGroupEmits
| 属性名 | 说明 | 类型 | 默认值 |
|---|---|---|---|
update:modelValue | — | (AsamCheckboxGroupEmits)["update:modelValue"] | — |
change | — | (AsamCheckboxGroupEmits)["change"] | — |
插槽 AsamCheckboxGroupSlots
| 属性名 | 说明 | 类型 | 默认值 |
|---|---|---|---|
default | — | (() => unknown) | undefined | — |
实例方法与状态 AsamCheckboxGroupExpose
用法与契约补充说明 ​
自定义字段与自动渲染 ​
props 映射原始 options 的 value/label/disabled;Group 原始记录不要求 raw。type="button" 连续拼接,min/max 同时限制可取消/新增数量。fill/textColor 定义激活按钮颜色,tag 定义容器元素。默认插槽覆盖自动渲染时仍继承数量、禁用和表单校验策略。
基础公开委托 ​
本入口直接委托底层依赖 2.14.7 对应组件的公开能力;公开 props/defaults、全部事件实参与插槽保持原生行为,仅增加 ASAM 四档尺寸与品牌样式。需要规范化 options、对象或字符串存储时使用本站 AsamRadio / AsamCheckbox 聚合入口。组内 Button 由原生样式处理首中尾连接、选中、禁用、焦点与键盘。
关联组件
参数与事件补充说明
完整透传 2.14.7 的基础参数,并在适用时使用 ASAM 尺寸密度。
参数与事件说明
ariaLabel
必填:否;声明来源:上游声明。
disabled
必填:否;声明来源:上游声明。
disabled 参数与事件数据
下列为声明可读视图;可导入类型以公开类型视图为准。分支条件与父属性一致。
枚举:false / true
默认值与来源
undefined(已安装运行时;已安装组件)fill
必填:否;声明来源:上游声明。
type
必填:否;声明来源:上游声明。
type 参数与事件数据
下列为声明可读视图;可导入类型以公开类型视图为准。分支条件与父属性一致。
枚举:"button" / "checkbox"
默认值与来源
"checkbox"(已安装运行时;已安装组件)props
必填:否;声明来源:上游声明。
props 参数与事件数据
下列为声明可读视图;可导入类型以公开类型视图为准。分支条件与父属性一致。
props.value:string | undefined— 上游声明props.label:string | undefined— 上游声明props.disabled:string | undefined— 上游声明
默认值与来源
工厂函数(每个实例创建)(实例工厂;已安装组件)max
必填:否;声明来源:上游声明。
modelValue
必填:否;声明来源:上游声明。
默认值与来源
工厂函数(每个实例创建)(实例工厂;已安装组件)tag
必填:否;声明来源:上游声明。
默认值与来源
"div"(已安装运行时;已安装组件)textColor
必填:否;声明来源:上游声明。
min
必填:否;声明来源:上游声明。
options
必填:否;声明来源:上游声明。
validateEvent
必填:否;声明来源:上游声明。
validateEvent 参数与事件数据
下列为声明可读视图;可导入类型以公开类型视图为准。分支条件与父属性一致。
枚举:false / true
默认值与来源
true(已安装运行时;已安装组件)size
必填:否;声明来源:ASAM 声明。
size 参数与事件数据
下列为声明可读视图;可导入类型以公开类型视图为准。分支条件与父属性一致。
枚举:"large" / "big" / "default" / "small"
默认值与来源
undefined(源码表达式;ASAM 声明)AsamCheckboxGroupProps 公开类型视图
import type { AsamCheckboxGroupProps, AsamControlSize } from '@asam-ui/ui';
type PublicMember<T, K extends PropertyKey> = T extends unknown ? K extends keyof T ? T[K] : never : never;
// AsamCheckboxGroupProps
type PublicContract = {
readonly "ariaLabel"?: string | undefined;
readonly "disabled"?: (AsamCheckboxGroupProps)["disabled"];
readonly "fill"?: string | undefined;
readonly "type"?: (AsamCheckboxGroupProps)["type"];
readonly "props"?: (AsamCheckboxGroupProps)["props"];
readonly "max"?: number | undefined;
readonly "modelValue"?: (AsamCheckboxGroupProps)["modelValue"];
readonly "tag"?: string | undefined;
readonly "textColor"?: string | undefined;
readonly "min"?: number | undefined;
readonly "options"?: (AsamCheckboxGroupProps)["options"];
readonly "validateEvent"?: (AsamCheckboxGroupProps)["validateEvent"];
"size"?: AsamControlSize | undefined;
};
参数与事件说明
update:modelValue
必填:是;声明来源:上游声明。
change
必填:是;声明来源:上游声明。
AsamCheckboxGroupEmits 公开类型视图
import type { AsamCheckboxGroupEmits } from '@asam-ui/ui';
// AsamCheckboxGroupEmits
type PublicContract = {
"update:modelValue": (AsamCheckboxGroupEmits)["update:modelValue"];
"change": (AsamCheckboxGroupEmits)["change"];
};
参数与事件说明
default
必填:否;声明来源:ASAM 声明。
default 参数与事件数据
下列为声明可读视图;可导入类型以公开类型视图为准。分支条件与父属性一致。
事件参数:(): unknown
AsamCheckboxGroupSlots 公开类型视图
import type { AsamCheckboxGroupSlots } from '@asam-ui/ui';
// AsamCheckboxGroupSlots
type PublicContract = {
"default"?: (() => unknown) | undefined;
};
AsamCheckboxGroupExpose 公开类型视图
import type { AsamCheckboxGroupExpose } from '@asam-ui/ui';
// AsamCheckboxGroupExpose
type PublicContract = {
[key: string]: never;
};