xtf-checkbox
组件说明
xtf-checkbox 是复选框组件,用于在多个选项中进行多选。支持方形/圆形指示器、多种变体(默认、柔和、卡片、按钮等)、半选状态、自定义图标、勾选动画和变更拦截,适用于表单多选、协议确认和偏好设置等场景。
基础用法
1. 最简示例
通过 label 设置文字,v-model 绑定选中状态:
vue
<template>
<xtf-checkbox v-model="agreed" label="我已阅读并同意用户协议" />
</template>
<script>
export default {
data() {
return {
agreed: false
}
}
}
</script>2. 复选框组
配合 xtf-checkbox-group 实现多选组,通过 name 标识选项值:
vue
<template>
<xtf-cell-group title="兴趣爱好">
<xtf-checkbox-group v-model="hobbies" direction="column">
<xtf-checkbox name="reading" label="阅读" />
<xtf-checkbox name="music" label="音乐" />
<xtf-checkbox name="sports" label="运动" />
<xtf-checkbox name="travel" label="旅行" />
</xtf-checkbox-group>
</xtf-cell-group>
</template>
<script>
export default {
data() {
return {
hobbies: ['reading', 'music']
}
}
}
</script>3. 形状与变体
通过 shape 切换方形/圆形,通过 variant 切换视觉风格:
vue
<template>
<view style="display: flex; flex-direction: column; gap: 20rpx">
<xtf-text level="caption" color="secondary">方形(默认)</xtf-text>
<xtf-checkbox-group v-model="selected" direction="row" :gap="24">
<xtf-checkbox name="a" label="选项A" shape="square" />
<xtf-checkbox name="b" label="选项B" shape="square" />
</xtf-checkbox-group>
<xtf-text level="caption" color="secondary">圆形</xtf-text>
<xtf-checkbox-group v-model="selected2" direction="row" :gap="24">
<xtf-checkbox name="a" label="选项A" shape="circle" />
<xtf-checkbox name="b" label="选项B" shape="circle" />
</xtf-checkbox-group>
<xtf-text level="caption" color="secondary">按钮变体</xtf-text>
<xtf-checkbox-group v-model="selected3" direction="row" :gap="16" variant="button">
<xtf-checkbox name="apple" label="苹果" />
<xtf-checkbox name="banana" label="香蕉" />
<xtf-checkbox name="orange" label="橙子" />
</xtf-checkbox-group>
</view>
</template>
<script>
export default {
data() {
return {
selected: ['a'],
selected2: ['a'],
selected3: ['apple']
}
}
}
</script>4. 半选与禁用
通过 indeterminate 设置半选状态,通过 disabled 禁用交互:
vue
<template>
<view style="display: flex; flex-direction: column; gap: 20rpx">
<xtf-checkbox label="半选状态" :indeterminate="true" />
<xtf-checkbox label="禁用未选" disabled />
<xtf-checkbox label="禁用已选" disabled checked />
</view>
</template>5. 主题色与自定义值
通过 theme 切换主题色,通过 trueValue / falseValue 自定义选中/未选值:
vue
<template>
<view style="display: flex; flex-direction: column; gap: 20rpx">
<xtf-checkbox-group v-model="colors" direction="row" :gap="24">
<xtf-checkbox name="1" label="主要" theme="primary" />
<xtf-checkbox name="2" label="成功" theme="success" />
<xtf-checkbox name="3" label="警告" theme="warning" />
<xtf-checkbox name="4" label="危险" theme="danger" />
</xtf-checkbox-group>
<xtf-checkbox v-model="status" label="启用通知" :true-value="'on'" :false-value="'off'" />
<xtf-text level="caption">当前值:{{ status }}</xtf-text>
</view>
</template>
<script>
export default {
data() {
return {
colors: ['1'],
status: 'off'
}
}
}
</script>全部属性
| 属性 | 类型 | 默认值 | 作用描述 | 适用范围 |
|---|---|---|---|---|
value | any | undefined | 绑定值(Vue 2) | 双向绑定 |
modelValue | any | undefined | 绑定值(Vue 3) | 双向绑定 |
name | String | Number | Boolean | '' | 在 xtf-checkbox-group 中的标识值 | 分组标识 |
label | String | '' | 文字标签 | 显示文字 |
description | String | '' | 描述文字 | 补充说明 |
checked | Boolean | false | 是否选中(非受控模式) | 选中状态 |
trueValue | any | true | 选中时的值 | 自定义选中值 |
falseValue | any | false | 未选时的值 | 自定义未选值 |
indeterminate | Boolean | false | 是否半选状态 | 全选/半选 |
shape | String | 'square' | 形状:'square' / 'circle' | 切换形状 |
labelClickable | Boolean | true | 点击文字是否触发切换 | 文字交互 |
disabled | Boolean | false | 是否禁用 | 禁用交互 |
theme | String | '' | 主题色:'primary' / 'success' / 'warning' / 'danger' / 'info' | 切换主题色 |
color | String | '' | 自定义选中颜色;activeColor 存在时优先使用 activeColor | 自定义色 |
activeColor | String | '' | 选中时颜色 | 自定义选中色 |
size | String | '' | 尺寸:'sm' / 'md' / 'lg' | 控制大小 |
variant | String | '' | 变体:'default' / 'soft' / 'card' / 'button' / 'tile' / 'solid' / 'glass' / 'minimal' | 切换视觉风格 |
checkAnimation | String | '' | 勾选动画:'none' / 'scale' / 'fade' / 'bounce' / 'flip' / 'pulse' / 'slide' | 切换动画 |
iconSize | String | Number | '' | 指示器图标大小 | 自定义图标大小 |
checkedIcon | String | '' | 选中时图标名或图片地址 | 自定义选中图标 |
uncheckedIcon | String | '' | 未选时图标名或图片地址 | 自定义未选图标 |
indeterminateIcon | String | '' | 半选时图标名或图片地址 | 自定义半选图标 |
iconPosition | String | 'left' | 图标位置:'left' / 'right' | 切换图标位置 |
align | String | 'center' | 对齐方式:'center' / 'start' | 对齐方式 |
block | Boolean | false | 是否占满整行 | 块级布局 |
bordered | Boolean | false | 是否显示边框 | 边框显示 |
beforeChange | Function | null | 变更拦截函数,返回 false 阻止变更 | 变更拦截 |
customClass | String | '' | 自定义类名 | 样式覆盖 |
customStyle | String | Object | '' | 自定义样式 | 动态样式覆盖 |
事件
| 事件名称 | 触发时机 | 回调参数 | 参数说明 |
|---|---|---|---|
change | 选中状态变更时触发 | (value) | 新的值(由 trueValue / falseValue 决定) |
input | Vue 2 双向绑定更新 | (value) | 新的值 |
update:modelValue | Vue 3 双向绑定更新 | (value) | 新的值 |
update:value | 值更新 | (value) | 新的值 |
事件使用示例
vue
<template>
<xtf-checkbox v-model="enabled" label="接收消息通知" @input="onInput" @change="onChange" />
</template>
<script>
export default {
data() {
return { enabled: false }
},
methods: {
onInput(value) {
console.log('绑定值更新', value)
},
onChange(value) {
uni.showToast({ title: value ? '已开启' : '已关闭', icon: 'none' })
}
}
}
</script>插槽
| 插槽名 | 作用域参数 | 说明 |
|---|---|---|
| 默认插槽 | 无 | 替换 label 文本。 |
description | 无 | 替换 description 辅助说明。 |
icon | { checked, indeterminate, disabled } | 替换复选框指示器。 |
vue
<template>
<xtf-checkbox v-model="enabled">
<template #icon="{ checked }">
<xtf-icon :name="checked ? 'check_circle' : 'radio_button_unchecked'" size="sm" />
</template>
<xtf-text level="body" text="使用自定义标签" />
<template #description>
<xtf-text level="caption" color="secondary" text="该设置可随时关闭" />
</template>
</xtf-checkbox>
</template>
<script>
export default {
data() {
return { enabled: true }
}
}
</script>主题说明
- 选中颜色使用
--xtf-checkbox-color,默认取主题色映射(primary对应var(--xtf-color-primary)等) - 勾选标记颜色使用
--xtf-checkbox-tick,默认#ffffff - 图标尺寸使用
--xtf-checkbox-icon-size、--xtf-checkbox-glyph-size、--xtf-checkbox-image-size - 动画类型通过
checkAnimation属性控制,默认'scale'
如需全局调整主题,请在 xtf-config-provider 或主题配置中覆盖上述 CSS 变量。