当前位置:首页 > VUE

vue实现单选框

2026-02-24 02:03:15VUE

使用 Vue 实现单选框

基础实现

在 Vue 中,可以使用 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>
    <p>Selected option: {{ selectedOption }}</p>
  </div>
</template>

<script>
export default {
  data() {
    return {
      selectedOption: ''
    }
  }
}
</script>

动态渲染选项

当选项需要从数据动态生成时,可以使用 v-for 指令:

vue实现单选框

<template>
  <div>
    <label v-for="option in options" :key="option.value">
      <input type="radio" v-model="selectedOption" :value="option.value"> {{ option.text }}
    </label>
    <p>Selected option: {{ selectedOption }}</p>
  </div>
</template>

<script>
export default {
  data() {
    return {
      selectedOption: '',
      options: [
        { value: 'option1', text: 'Option 1' },
        { value: 'option2', text: 'Option 2' },
        { value: 'option3', text: 'Option 3' }
      ]
    }
  }
}
</script>

自定义样式单选框

使用 CSS 隐藏原生单选框,通过 label 实现自定义样式:

vue实现单选框

<template>
  <div>
    <div class="radio-group">
      <label v-for="option in options" :key="option.value" :class="{ active: selectedOption === option.value }">
        <input type="radio" v-model="selectedOption" :value="option.value" class="hidden-radio">
        {{ option.text }}
      </label>
    </div>
  </div>
</template>

<style>
.hidden-radio {
  position: absolute;
  opacity: 0;
}

.radio-group label {
  padding: 8px 16px;
  border: 1px solid #ddd;
  margin-right: 5px;
  cursor: pointer;
}

.radio-group label.active {
  background-color: #42b983;
  color: white;
}
</style>

组件化实现

将单选框封装为可复用的组件:

<!-- RadioGroup.vue -->
<template>
  <div class="radio-group">
    <label v-for="option in options" :key="option.value" :class="{ active: modelValue === option.value }">
      <input 
        type="radio" 
        :value="option.value" 
        @change="$emit('update:modelValue', option.value)"
        class="hidden-radio"
      >
      {{ option.text }}
    </label>
  </div>
</template>

<script>
export default {
  props: {
    options: {
      type: Array,
      required: true
    },
    modelValue: {
      type: [String, Number],
      required: true
    }
  },
  emits: ['update:modelValue']
}
</script>

使用组件:

<template>
  <div>
    <RadioGroup v-model="selectedOption" :options="options" />
    <p>Selected option: {{ selectedOption }}</p>
  </div>
</template>

<script>
import RadioGroup from './RadioGroup.vue'

export default {
  components: {
    RadioGroup
  },
  data() {
    return {
      selectedOption: 'option1',
      options: [
        { value: 'option1', text: 'Option 1' },
        { value: 'option2', text: 'Option 2' }
      ]
    }
  }
}
</script>

注意事项

  • 确保每个单选框都有唯一的 value 属性
  • 使用 v-model 进行双向数据绑定
  • 动态渲染时记得添加 :key
  • 自定义样式时注意可访问性,确保隐藏的原生单选框仍然可以通过键盘操作

标签: 单选框vue
分享给朋友:

相关文章

vue实现自定义登录

vue实现自定义登录

实现自定义登录的基本步骤 在Vue中实现自定义登录功能通常需要结合前端和后端技术。以下是一个基本的实现流程: 创建登录表单组件 使用Vue的单文件组件创建一个登录表单,包含用户名和密码输入框以及提交…

vue实现素材

vue实现素材

Vue 实现素材的方法 使用 Vue 组件管理素材 在 Vue 项目中,可以通过组件化的方式管理素材。创建一个专门的组件来加载和显示素材,例如图片、视频或音频文件。组件可以接收素材的路径或 URL 作…

vue  实现tab

vue 实现tab

实现 Tab 切换功能 在 Vue 中实现 Tab 切换功能可以通过动态组件或条件渲染完成。以下是两种常见方法: 使用 v-if 或 v-show 实现条件渲染 通过绑定 currentTab 变量…

vue 实现fadeout

vue 实现fadeout

Vue 实现淡出效果 在 Vue 中实现淡出(fade-out)效果可以通过 CSS 过渡或动画结合 Vue 的动态渲染功能完成。以下是几种常见方法: 使用 Vue 过渡(Transition)组件…

vue实现tooltips

vue实现tooltips

Vue 实现 Tooltips 的方法 使用原生 HTML title 属性 在 Vue 模板中直接使用 HTML 原生 title 属性实现简单的提示效果。这种方式无需额外依赖,但功能较为基础,无法…

vue实现理财超市

vue实现理财超市

Vue实现理财超市功能 理财超市通常包含产品展示、筛选、排序、详情页等功能,以下是基于Vue的实现方案: 技术栈建议 Vue 2/3 + Vue Router UI库:Element UI/Ant…