当前位置:首页 > VUE

vue radio组件实现

2026-02-11 03:18:03VUE

Vue Radio 组件实现方法

基础实现方式

使用原生 HTML 的 input 元素结合 Vue 的 v-model 指令可以快速实现单选功能。通过 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>

    <p>Selected: {{ selectedOption }}</p>
  </div>
</template>

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

组件化封装

将单选按钮封装为可复用的组件,通过 props 接收选项列表和当前值,通过 emit 通知父组件选择变化。

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

<script>
export default {
  props: {
    options: {
      type: Array,
      required: true
    },
    modelValue: {
      type: [String, Number],
      default: ''
    }
  },
  data() {
    return {
      internalValue: this.modelValue
    }
  },
  watch: {
    modelValue(newVal) {
      this.internalValue = newVal
    }
  }
}
</script>

使用封装组件

父组件中使用封装好的单选组件,通过 v-model 进行双向绑定。

<template>
  <RadioGroup 
    v-model="selectedOption"
    :options="[
      { value: 'opt1', label: 'Option 1' },
      { value: 'opt2', label: 'Option 2' }
    ]"
  />
  <p>Selected: {{ selectedOption }}</p>
</template>

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

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

UI 库集成

对于需要更丰富样式和功能的场景,可以直接使用 UI 库提供的单选组件。

Element UI 示例:

<template>
  <el-radio-group v-model="radio">
    <el-radio :label="1">Option 1</el-radio>
    <el-radio :label="2">Option 2</el-radio>
  </el-radio-group>
</template>

<script>
export default {
  data() {
    return {
      radio: 1
    }
  }
}
</script>

Ant Design Vue 示例:

<template>
  <a-radio-group v-model:value="value">
    <a-radio value="A">Option A</a-radio>
    <a-radio value="B">Option B</a-radio>
  </a-radio-group>
</template>

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

自定义样式

通过 CSS 自定义单选按钮样式,通常需要隐藏原生输入框,使用伪元素创建自定义外观。

vue radio组件实现

<template>
  <div class="custom-radio">
    <input 
      type="radio" 
      id="custom1" 
      value="custom1" 
      v-model="customOption"
    >
    <label for="custom1">Custom Style</label>
  </div>
</template>

<style>
.custom-radio input[type="radio"] {
  opacity: 0;
  position: absolute;
}

.custom-radio label {
  position: relative;
  padding-left: 25px;
  cursor: pointer;
}

.custom-radio label:before {
  content: "";
  position: absolute;
  left: 0;
  top: 0;
  width: 18px;
  height: 18px;
  border: 2px solid #ddd;
  border-radius: 50%;
}

.custom-radio input[type="radio"]:checked + label:after {
  content: "";
  position: absolute;
  left: 5px;
  top: 5px;
  width: 12px;
  height: 12px;
  background: #409eff;
  border-radius: 50%;
}
</style>

标签: 组件vue
分享给朋友:

相关文章

vue 实现长列表

vue 实现长列表

Vue 实现长列表的优化方案 虚拟滚动技术 虚拟滚动是处理长列表的高效方式,仅渲染可视区域内的元素。通过计算滚动位置动态加载和卸载DOM节点,大幅减少内存占用和渲染压力。 <template&…

vue实现RTMP

vue实现RTMP

Vue 中实现 RTMP 流播放 RTMP(Real-Time Messaging Protocol)是一种用于实时音视频流传输的协议。在 Vue 中实现 RTMP 播放通常需要借助第三方库或播放器。…

javascript实现vue

javascript实现vue

Vue.js 的基本实现 在 JavaScript 中实现 Vue.js 的核心功能,主要包括数据绑定、响应式系统和虚拟 DOM。以下是一个简化的实现示例。 数据响应式系统 通过 Object.de…

vue实现筛选

vue实现筛选

实现筛选功能的基本思路 在Vue中实现筛选功能通常需要结合数据绑定、计算属性和方法。筛选的核心逻辑是根据用户输入的条件过滤原始数据列表,并动态更新显示结果。 数据准备 定义一个数组存储原始数据,另一…

vue 实现折叠

vue 实现折叠

Vue 实现折叠功能的方法 在 Vue 中实现折叠功能可以通过多种方式完成,以下是几种常见的实现方法: 使用 v-if 或 v-show 控制显示隐藏 通过绑定一个布尔值变量,结合 v-if 或 v…

轮播vue实现

轮播vue实现

使用 Vue 实现轮播功能 基础轮播实现 安装依赖(如使用 Swiper): npm install swiper vue-awesome-swiper 组件代码示例: <template&…