Radio

Intro

Single selection among multiple options.

Install

Register component globally via app.use, refer to Component Registration for more registration ways.

import { createApp } from 'vue';
import { RadioGroup, Radio } from 'vant';

const app = createApp();
app.use(Radio);
app.use(RadioGroup);

Usage

Basic Usage

Use v-model to bind the name of checked radio.

<van-radio-group v-model="checked">
  <van-radio name="1">Radio 1</van-radio>
  <van-radio name="2">Radio 2</van-radio>
</van-radio-group>
import { ref } from 'vue';

export default {
  setup() {
    const checked = ref('1');
    return { checked };
  },
};

Horizontal

<van-radio-group v-model="checked" direction="horizontal">
  <van-radio name="1">Radio 1</van-radio>
  <van-radio name="2">Radio 2</van-radio>
</van-radio-group>

Disabled

<van-radio-group v-model="checked" disabled>
  <van-radio name="1">Radio 1</van-radio>
  <van-radio name="2">Radio 2</van-radio>
</van-radio-group>

Custom Shape

<van-radio-group v-model="checked">
  <van-radio name="1" shape="square">Radio 1</van-radio>
  <van-radio name="2" shape="square">Radio 2</van-radio>
</van-radio-group>

Custom Color

<van-radio-group v-model="checked">
  <van-radio name="1" checked-color="#ee0a24">Radio 1</van-radio>
  <van-radio name="2" checked-color="#ee0a24">Radio 2</van-radio>
</van-radio-group>

Custom Icon Size

<van-radio-group v-model="checked">
  <van-radio name="1" icon-size="24px">Radio 1</van-radio>
  <van-radio name="2" icon-size="24px">Radio 2</van-radio>
</van-radio-group>

Custom Icon

Use icon slot to custom icon

<van-radio-group v-model="checked">
  <van-radio name="1">
    Radio 1
    <template #icon="props">
      <img class="img-icon" :src="props.checked ? activeIcon : inactiveIcon" />
    </template>
  </van-radio>
  <van-radio name="2">
    Radio 2
    <template #icon="props">
      <img class="img-icon" :src="props.checked ? activeIcon : inactiveIcon" />
    </template>
  </van-radio>
</van-radio-group>

<style>
  .img-icon {
    height: 20px;
  }
</style>
import { ref } from 'vue';

export default {
  setup() {
    const checked = ref('1');
    return {
      checked,
      activeIcon: 'https://img.yzcdn.cn/vant/user-active.png',
      inactiveIcon: 'https://img.yzcdn.cn/vant/user-inactive.png',
    };
  },
};

Disable Label Click

<van-radio-group v-model="checked">
  <van-radio name="1" label-disabled>Radio 1</van-radio>
  <van-radio name="2" label-disabled>Radio 2</van-radio>
</van-radio-group>

Inside a Cell

<van-radio-group v-model="checked">
  <van-cell-group>
    <van-cell title="Radio 1" clickable @click="checked = '1'">
      <template #right-icon>
        <van-radio name="1" />
      </template>
    </van-cell>
    <van-cell title="Radio 2" clickable @click="checked = '2'">
      <template #right-icon>
        <van-radio name="2" />
      </template>
    </van-cell>
  </van-cell-group>
</van-radio-group>

API

Radio Props

Attribute Description Type Default
name Radio name any -
shape Can be set to square string round
disabled Whether to disable radio boolean false
label-disabled Whether to disable label click boolean false
label-position Can be set to left string right
icon-size Icon size number | string 20px
checked-color Checked color string #1989fa

RadioGroup Props

Attribute Description Type Default
v-model Name of checked radio any -
disabled Disable all radios boolean false
direction Direction, can be set to horizontal string vertical
icon-size Icon size of all radios number | string 20px
checked-color Checked color of all radios string #1989fa

Radio Events

Event Description Parameters
click Emitted when radio is clicked event: MouseEvent

RadioGroup Events

Event Description Parameters
change Emitted when value changed name: string

Radio Slots

Name Description SlotProps
default Custom label -
icon Custom icon { checked: boolean, disabled: boolean }

CSS Variables

The component provides the following CSS variables, which can be used to customize styles. Please refer to ConfigProvider component.

Name Default Value Description
--van-radio-size 20px -
--van-radio-border-color var(--van-gray-5) -
--van-radio-transition-duration var(--van-animation-duration-fast) -
--van-radio-label-margin var(--van-padding-xs) -
--van-radio-label-color var(--van-text-color) -
--van-radio-checked-icon-color var(--van-primary-color) -
--van-radio-disabled-icon-color var(--van-gray-5) -
--van-radio-disabled-label-color var(--van-gray-5) -
--van-radio-disabled-background-color var(--van-border-color) -