通过 v-model 绑定数据实现单选功能,适合基础场景:
当前位置:首页 > VUE

vue radio实现单选

2026-01-19 02:27:32VUE

实现 Vue 单选按钮(Radio)的方法

使用原生 <input type="radio">

通过 v-model 绑定数据实现单选功能,适合基础场景:

<template>
  <div>
    <input type="radio" id="option1" value="Option1" v-model="selectedOption">
    <label for="option1">Option 1</label>

    <input type="radio" id="option2" value="Option2" v-model="selectedOption">
    <label for="option2">Option 2</label>
  </div>
</template>

<script>
export default {
  data() {
    return {
      selectedOption: '' // 默认选中的值
    }
  }
}
</script>

使用 Element UI 的 Radio 组件

适用于使用 Element UI 框架的项目:

vue radio实现单选

<template>
  <div>
    <el-radio v-model="radioValue" label="1">Option A</el-radio>
    <el-radio v-model="radioValue" label="2">Option B</el-radio>
  </div>
</template>

<script>
export default {
  data() {
    return {
      radioValue: '1' // 默认选中值需与 label 匹配
    }
  }
}
</script>

动态生成 Radio 选项

通过 v-for 动态渲染选项列表:

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

<script>
export default {
  data() {
    return {
      selectedOption: 'A',
      options: [
        { value: 'A', label: 'Alpha' },
        { value: 'B', label: 'Beta' }
      ]
    }
  }
}
</script>

自定义 Radio 组件

创建可复用的自定义单选组件:

vue radio实现单选

<!-- CustomRadio.vue -->
<template>
  <div class="custom-radio" @click="selectOption">
    <div :class="{ 'active': isSelected }"></div>
    <span>{{ label }}</span>
  </div>
</template>

<script>
export default {
  props: {
    label: String,
    value: String,
    selectedValue: String
  },
  computed: {
    isSelected() {
      return this.value === this.selectedValue
    }
  },
  methods: {
    selectOption() {
      this.$emit('input', this.value)
    }
  }
}
</script>

<style scoped>
.custom-radio { display: flex; align-items: center; cursor: pointer; }
.active { background-color: #409EFF; }
</style>

使用 Vuex 管理状态

当需要全局状态管理时:

// store.js
export default new Vuex.Store({
  state: {
    radioSelection: null
  },
  mutations: {
    setRadioSelection(state, payload) {
      state.radioSelection = payload
    }
  }
})
<template>
  <input 
    type="radio" 
    v-model="$store.state.radioSelection" 
    value="storeOption"
  >
</template>

表单验证集成

结合 vee-validate 进行表单验证:

<template>
  <ValidationProvider rules="required" v-slot="{ errors }">
    <input type="radio" v-model="choice" value="accept">
    <span>{{ errors[0] }}</span>
  </ValidationProvider>
</template>

注意事项

  • 单选按钮组必须共享同一个 v-model 绑定
  • 动态生成的选项需确保 value 唯一性
  • 组件库的 Radio 通常提供更丰富的样式和功能(如禁用状态)
  • 移动端建议增加点击区域大小

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

相关文章

vue实现积分

vue实现积分

Vue 实现积分功能 在 Vue 中实现积分功能通常涉及前端展示、交互逻辑以及与后端 API 的通信。以下是常见的实现方法和步骤: 积分展示组件 创建一个积分展示组件,用于显示当前用户的积分。可以使…

vue 实现直播

vue 实现直播

Vue 实现直播的基本方法 在Vue中实现直播功能,通常需要结合WebRTC、RTMP或HLS等技术。以下是几种常见的实现方式: 使用WebRTC实现实时直播 WebRTC适合低延迟的实时直播场景,…

vue实现ios

vue实现ios

Vue 实现 iOS 风格应用 使用 Vue 实现 iOS 风格的应用,可以通过结合 UI 框架和自定义样式来达成目标。以下是具体方法和步骤: 选择 iOS 风格的 UI 框架 Vue 生态中有多…

vue实现树

vue实现树

Vue 实现树形结构的方法 使用递归组件实现树形结构 递归组件是Vue中实现树形结构的常见方式。通过组件调用自身,可以轻松构建多层嵌套的树形数据。 <template> <ul…

vue实现注销

vue实现注销

实现用户注销功能 在Vue应用中实现用户注销功能通常涉及清除用户会话、重置应用状态并跳转到登录页面。以下是具体实现方法: 清除用户认证信息 使用Vuex或Pinia管理用户状态时,需在注销时重置存储…

vue实现tap

vue实现tap

Vue 实现 Tap 事件 在移动端开发中,Tap 事件比 Click 事件更常用,因为 Click 事件有 300ms 延迟。以下是几种在 Vue 中实现 Tap 事件的方法。 使用第三方库 安装…