Skip to content

Radio 单选框

用于在一组选项中选择单个选项的单选框组件,支持分组使用。

名称分类说明类型默认值
type? 风格预设主题颜色类型'primary' | 'success' | 'warning' | 'danger' | 'info'
type? 风格所有子单选框的预设主题颜色'primary' | 'success' | 'warning' | 'danger' | 'info'
size? 尺寸尺寸'large' | 'small'
size? 尺寸所有子单选框的尺寸'large' | 'small'
color? 颜色自定义十六进制颜色string
color? 颜色所有子单选框的自定义十六进制颜色string
disabled? 状态是否禁用booleanfalse
disabled? 状态是否禁用所有子单选框booleanfalse
name? 行为原生 name 属性string
id? 行为原生 id 属性string
name? 行为所有子单选框的 name 属性string
model-value / v-model? 内容绑定值string | number | boolean
value? 内容单选框的标识值,当 modelValue 等于 value 时为选中状态string | number | boolean
label? 内容标签文本string
model-value / v-model? 内容绑定值string | number | boolean
change? 事件选中值改变时触发(value: RadioValueType) => void
change? 事件选中值改变时触发(value: RadioValueType) => void
default? 插槽自定义标签内容
default? 插槽子单选框内容
focus? 暴露使单选框获取焦点() => void
checked? 暴露是否选中ComputedRef<boolean>

基础用法

绑定 v-model 到一个变量并设置 value 属性。当 modelValue === value 时为选中状态。

<template>
  <div class="demo-radio">
    <px-radio v-model="selected" value="a" label="Option A" />
    <px-radio v-model="selected" value="b" label="Option B" />
    <p class="demo-radio__result">Selected: {{ selected }}</p>
  </div>
</template>

<script setup lang="ts">
import { ref } from 'vue';

const selected = ref('a');
</script>

<style scoped>
.demo-radio {
  display: flex;
  align-items: center;
  flex-wrap: wrap;
  gap: 20px;
}
.demo-radio__result {
  font-family: var(--px-font-family);
  font-size: 14px;
  color: var(--px-text-color-secondary);
}
</style>

禁用状态

使用 disabled 属性来禁用单选框。

<template>
  <div class="demo-radio">
    <px-radio v-model="selected" value="a" label="Disabled selected" disabled />
    <px-radio v-model="selected" value="b" label="Disabled unselected" disabled />
  </div>
</template>

<script setup lang="ts">
import { ref } from 'vue';

const selected = ref('a');
</script>

<style scoped>
.demo-radio {
  display: flex;
  align-items: center;
  gap: 20px;
}
</style>

类型

使用 type 属性来应用预设主题颜色。

<template>
  <div class="demo-radio">
    <px-radio v-model="v1" value="a" label="Primary" type="primary" />
    <px-radio v-model="v2" value="a" label="Success" type="success" />
    <px-radio v-model="v3" value="a" label="Warning" type="warning" />
    <px-radio v-model="v4" value="a" label="Danger" type="danger" />
    <px-radio v-model="v5" value="a" label="Info" type="info" />
  </div>
</template>

<script setup lang="ts">
import { ref } from 'vue';

const v1 = ref('a');
const v2 = ref('a');
const v3 = ref('a');
const v4 = ref('a');
const v5 = ref('a');
</script>

<style scoped>
.demo-radio {
  display: flex;
  align-items: center;
  flex-wrap: wrap;
  gap: 20px;
}
</style>

自定义颜色

使用 color 属性来设置选中状态的自定义十六进制颜色。

<template>
  <div class="demo-radio">
    <px-radio v-model="v1" value="a" label="Coral" color="#ff6b6b" />
    <px-radio v-model="v2" value="a" label="Teal" color="#20c997" />
    <px-radio v-model="v3" value="a" label="Purple" color="#845ef7" />
  </div>
</template>

<script setup lang="ts">
import { ref } from 'vue';

const v1 = ref('a');
const v2 = ref('a');
const v3 = ref('a');
</script>

<style scoped>
.demo-radio {
  display: flex;
  align-items: center;
  gap: 20px;
}
</style>

不同尺寸

使用 size 属性来设置单选框的大小。

<template>
  <div class="demo-radio">
    <px-radio v-model="v1" value="a" label="Small" size="small" />
    <px-radio v-model="v2" value="a" label="Default" />
    <px-radio v-model="v3" value="a" label="Large" size="large" />
  </div>
</template>

<script setup lang="ts">
import { ref } from 'vue';

const v1 = ref('a');
const v2 = ref('a');
const v3 = ref('a');
</script>

<style scoped>
.demo-radio {
  display: flex;
  align-items: center;
  gap: 20px;
}
</style>

单选框组

使用 PxRadioGroup 来通过单个 v-model 管理多个单选框。同一时间只能选中一个选项。

<template>
  <div class="demo-radio">
    <px-radio-group v-model="selected">
      <px-radio value="apple" label="Apple" />
      <px-radio value="banana" label="Banana" />
      <px-radio value="cherry" label="Cherry" />
      <px-radio value="durian" label="Durian" />
    </px-radio-group>
    <p class="demo-radio__result">Selected: {{ selected }}</p>
  </div>
</template>

<script setup lang="ts">
import { ref } from 'vue';

const selected = ref('apple');
</script>

<style scoped>
.demo-radio {
  display: flex;
  flex-direction: column;
  gap: 12px;
}
.demo-radio__result {
  font-family: var(--px-font-family);
  font-size: 14px;
  color: var(--px-text-color-secondary);
}
</style>