结合v-model实现数据双向绑定。以下是一个基础示例:
当前位置:首页 > VUE

vue组件实现单选按钮

2026-01-22 07:51:48VUE

实现单选按钮的基本结构

在Vue中实现单选按钮,可以使用原生HTML的<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>
    <p>Selected: {{ selectedOption }}</p>
  </div>
</template>

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

动态渲染单选按钮组

通过v-for动态生成单选按钮选项,适用于选项数据来自API或需要灵活配置的场景:

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

<script>
export default {
  data() {
    return {
      selectedOption: '',
      options: [
        { value: 'apple', label: 'Apple' },
        { value: 'banana', label: 'Banana' },
        { value: 'orange', label: 'Orange' }
      ]
    }
  }
}
</script>

自定义单选按钮组件

封装可复用的单选按钮组件,增强样式控制和功能扩展:

<!-- RadioButton.vue -->
<template>
  <label class="radio-container">
    <input 
      type="radio" 
      :checked="isChecked"
      @change="$emit('change', value)"
    >
    <span class="radio-checkmark"></span>
    <span class="radio-label">{{ label }}</span>
  </label>
</template>

<script>
export default {
  props: {
    label: String,
    value: [String, Number],
    isChecked: Boolean
  }
}
</script>

<style>
.radio-container {
  display: block;
  position: relative;
  padding-left: 25px;
  cursor: pointer;
}
.radio-checkmark {
  position: absolute;
  top: 0;
  left: 0;
  height: 16px;
  width: 16px;
  border: 1px solid #ddd;
  border-radius: 50%;
}
.radio-container input:checked ~ .radio-checkmark {
  background-color: #2196F3;
}
</style>

单选按钮组管理

使用计算属性和watch处理复杂逻辑,例如表单验证或联动操作:

<template>
  <div>
    <RadioButton 
      v-for="option in options"
      :key="option.value"
      :label="option.label"
      :value="option.value"
      :is-checked="selectedOption === option.value"
      @change="handleChange"
    />
  </div>
</template>

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

export default {
  components: { RadioButton },
  data() {
    return {
      selectedOption: null,
      options: [
        { value: 1, label: 'Low' },
        { value: 2, label: 'Medium' },
        { value: 3, label: 'High' }
      ]
    }
  },
  methods: {
    handleChange(value) {
      this.selectedOption = value
      this.$emit('input', value)
    }
  }
}
</script>

表单集成与验证

在Vue表单中配合验证库(如VeeValidate)使用单选按钮:

vue组件实现单选按钮

<template>
  <form @submit.prevent="submitForm">
    <div v-for="option in options" :key="option.value">
      <input
        type="radio"
        v-model="form.level"
        :value="option.value"
        v-validate="'required'"
        name="level"
      >
      {{ option.label }}
    </div>
    <span v-show="errors.has('level')" class="error">
      {{ errors.first('level') }}
    </span>
    <button type="submit">Submit</button>
  </form>
</template>

<script>
export default {
  data() {
    return {
      form: { level: '' },
      options: [
        { value: 'basic', label: 'Basic' },
        { value: 'pro', label: 'Professional' }
      ]
    }
  },
  methods: {
    submitForm() {
      this.$validator.validate().then(valid => {
        if (valid) {
          // 提交表单逻辑
        }
      })
    }
  }
}
</script>

标签: 单选组件
分享给朋友:

相关文章

vue组件传值实现分页

vue组件传值实现分页

Vue 组件传值实现分页 在Vue中实现分页功能,通常需要父子组件之间的数据传递。以下是几种常见的传值方法: 使用props和$emit 父组件通过props向子组件传递数据,子组件通过$emit向…

vue实现下拉刷新组件

vue实现下拉刷新组件

Vue 下拉刷新组件实现 核心思路 通过监听 touch 事件计算滑动距离,结合 CSS 过渡动画实现下拉效果,触发刷新回调。 基础实现步骤 监听 touch 事件 在组件 mounted 阶段绑定…

vue实现组件跟随

vue实现组件跟随

Vue 实现组件跟随效果 实现组件跟随效果通常需要监听鼠标或触摸事件,动态更新组件位置。以下是几种常见实现方式: 使用鼠标事件绑定 <template> <div class=…

vue 实现表格单选

vue 实现表格单选

实现表格单选的基本思路 在Vue中实现表格单选功能,通常需要结合表格组件(如el-table)和数据绑定。核心逻辑是通过点击事件更新当前选中行的唯一标识(如id),并通过:class或:style绑定…

vue实现单选弹窗

vue实现单选弹窗

Vue 实现单选弹窗的方法 使用 Element UI 的 Dialog 和 Radio 组件 安装 Element UI 后,可以通过 Dialog 和 Radio 组件快速实现单选弹窗功能。…

vue 实现图片单选

vue 实现图片单选

Vue 实现图片单选功能 在 Vue 中实现图片单选功能,可以通过结合 v-model 和自定义事件来实现。以下是具体实现方法: 方法一:使用 v-model 和计算属性 创建一个 Vue 组件,包…