通过 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 框架的项目:

<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 组件

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

<!-- 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 radio实现单选

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

相关文章

课程表vue实现

课程表vue实现

实现课程表的Vue组件 创建课程表需要设计数据结构、布局和交互逻辑。以下是一个基于Vue 3的实现方案: 数据结构设计 const timetableData = ref([ {…

vue异步组建实现原理

vue异步组建实现原理

Vue 异步组件实现原理 Vue 的异步组件允许将组件按需加载,通常用于代码分割或延迟加载非关键组件。其核心原理基于 Promise 和动态导入。 基本实现方式 通过 defineAsyncCom…

vue实现store

vue实现store

Vue 实现 Store 在 Vue 中,可以通过 Vuex 或 Pinia 实现全局状态管理(Store)。以下是两种主流方案的实现方法。 使用 Vuex 实现 Store Vuex 是 Vue…

vue实现visual

vue实现visual

Vue 实现可视化(Visual)的常见方法 在 Vue 中实现可视化通常涉及数据可视化库的集成,以下是几种主流方案: 使用 ECharts ECharts 是一个强大的 JavaScript 图表…

代码实现vue

代码实现vue

创建Vue项目 使用Vue CLI快速初始化项目,确保已安装Node.js和npm/yarn: npm install -g @vue/cli vue create my-vue-project c…

vue实现tablegrid

vue实现tablegrid

Vue 实现 TableGrid 的方法 使用 Element UI 的 Table 组件 Element UI 提供了强大的 Table 组件,可以快速实现表格布局。安装 Element UI 后,…