vue 实现单选
Vue 实现单选功能
在 Vue 中实现单选功能可以通过多种方式完成,以下是几种常见的方法:
使用原生 <input type="radio">
通过 v-model 绑定单选按钮的值,实现单选功能:
<template>
<div>
<label>
<input type="radio" v-model="selectedOption" value="option1" />
Option 1
</label>
<label>
<input type="radio" v-model="selectedOption" value="option2" />
Option 2
</label>
<label>
<input type="radio" v-model="selectedOption" value="option3" />
Option 3
</label>
<p>Selected option: {{ selectedOption }}</p>
</div>
</template>
<script>
export default {
data() {
return {
selectedOption: '',
};
},
};
</script>
使用 Vue 组件库(如 Element UI)
如果使用 Element UI,可以直接使用 el-radio 组件:
<template>
<div>
<el-radio v-model="selectedOption" label="option1">Option 1</el-radio>
<el-radio v-model="selectedOption" label="option2">Option 2</el-radio>
<el-radio v-model="selectedOption" label="option3">Option 3</el-radio>
<p>Selected option: {{ selectedOption }}</p>
</div>
</template>
<script>
export default {
data() {
return {
selectedOption: '',
};
},
};
</script>
动态生成单选按钮
通过 v-for 动态生成单选按钮,适用于选项较多的情况:
<template>
<div>
<label v-for="option in options" :key="option.value">
<input type="radio" v-model="selectedOption" :value="option.value" />
{{ option.label }}
</label>
<p>Selected option: {{ selectedOption }}</p>
</div>
</template>
<script>
export default {
data() {
return {
selectedOption: '',
options: [
{ value: 'option1', label: 'Option 1' },
{ value: 'option2', label: 'Option 2' },
{ value: 'option3', label: 'Option 3' },
],
};
},
};
</script>
自定义单选组件
如果需要更复杂的逻辑,可以封装一个自定义单选组件:
<template>
<div>
<custom-radio
v-model="selectedOption"
:options="options"
/>
<p>Selected option: {{ selectedOption }}</p>
</div>
</template>
<script>
import CustomRadio from './CustomRadio.vue';
export default {
components: { CustomRadio },
data() {
return {
selectedOption: '',
options: [
{ value: 'option1', label: 'Option 1' },
{ value: 'option2', label: 'Option 2' },
{ value: 'option3', label: 'Option 3' },
],
};
},
};
</script>
CustomRadio.vue 的实现:
<template>
<div>
<label v-for="option in options" :key="option.value">
<input
type="radio"
:value="option.value"
:checked="modelValue === option.value"
@change="$emit('update:modelValue', option.value)"
/>
{{ option.label }}
</label>
</div>
</template>
<script>
export default {
props: {
modelValue: {
type: String,
default: '',
},
options: {
type: Array,
required: true,
},
},
emits: ['update:modelValue'],
};
</script>
注意事项
- 确保
v-model绑定的变量初始值为空字符串或其他默认值。 - 动态生成单选按钮时,为每个选项设置唯一的
key。 - 如果需要表单验证,可以结合 Vue 的表单验证库(如 VeeValidate)使用。







