结合 Vue 的响应式特性,或者使用第三方 UI 库…">
当前位置:首页 > VUE

vue radio组件实现

2026-01-08 14:01:04VUE

Vue Radio 组件实现

在 Vue 中实现 Radio 组件可以通过原生 HTML 的 <input type="radio"> 结合 Vue 的响应式特性,或者使用第三方 UI 库(如 Element UI、Ant Design Vue)提供的现成组件。以下是几种实现方式:

原生 HTML + Vue 实现

使用原生 <input type="radio"> 结合 v-model 实现双向绑定:

vue radio组件实现

<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: 'option1'
    };
  }
};
</script>
  • v-model 绑定到 selectedOption,用于同步选中的值。
  • value 属性定义每个 Radio 的值。

封装可复用的 Radio 组件

封装一个自定义的 Radio 组件,支持更灵活的配置:

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

<script>
export default {
  props: {
    options: {
      type: Array,
      required: true,
      validator: (options) =>
        options.every((opt) => opt.value && opt.label)
    },
    value: {
      type: [String, Number],
      required: true
    }
  },
  computed: {
    selectedValue: {
      get() {
        return this.value;
      },
      set(newValue) {
        this.$emit('input', newValue);
      }
    }
  }
};
</script>

使用方法:

vue radio组件实现

<template>
  <RadioGroup
    v-model="selectedOption"
    :options="[
      { value: 'option1', label: 'Option 1' },
      { value: 'option2', label: 'Option 2' }
    ]"
    @change="handleChange"
  />
</template>

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

export default {
  components: { RadioGroup },
  data() {
    return {
      selectedOption: 'option1'
    };
  },
  methods: {
    handleChange(value) {
      console.log('Selected:', value);
    }
  }
};
</script>
  • 通过 options 动态渲染 Radio 选项。
  • 支持 v-model 双向绑定和 @change 事件。

使用第三方 UI 库

以 Element UI 为例:

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

<script>
export default {
  data() {
    return {
      selectedOption: 'option1'
    };
  }
};
</script>
  • 直接使用 <el-radio-group><el-radio> 组件。
  • 支持更多功能如禁用状态、边框样式等。

动态生成 Radio 选项

从接口或动态数据生成 Radio 选项:

<template>
  <div>
    <label v-for="item in dynamicOptions" :key="item.id">
      <input
        type="radio"
        v-model="selectedDynamicOption"
        :value="item.value"
      />
      {{ item.text }}
    </label>
  </div>
</template>

<script>
export default {
  data() {
    return {
      selectedDynamicOption: '',
      dynamicOptions: [
        { id: 1, value: 'dynamic1', text: 'Dynamic 1' },
        { id: 2, value: 'dynamic2', text: 'Dynamic 2' }
      ]
    };
  }
};
</script>
  • 通过 v-for 动态渲染选项。
  • 适用于选项数据来自后端接口的场景。

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

相关文章

vue实现倒计时组件

vue实现倒计时组件

实现基础倒计时功能 使用 Vue 的 data 和 methods 定义倒计时逻辑,通过 setInterval 更新剩余时间。 <template> <div>{{…

vue实现菜单栏锚点

vue实现菜单栏锚点

实现锚点菜单的基本思路 在Vue中实现菜单栏锚点功能,主要涉及两个方面:创建可跳转的锚点位置,以及菜单项的点击滚动控制。通过监听滚动事件可以高亮当前可见区域的对应菜单项。 创建页面锚点位置 在需要跳…

vue 实现tabs

vue 实现tabs

Vue 实现 Tabs 组件的方法 使用动态组件和 v-for 在 Vue 中实现 Tabs 可以通过动态组件和 v-for 指令结合完成。定义一个 tabs 数组,包含每个标签的标题和对应的组件。…

vue 实现脚本

vue 实现脚本

Vue 实现脚本的方法 Vue.js 提供了多种方式来实现脚本功能,包括组件内脚本、混入(Mixins)、插件(Plugins)以及自定义指令等。以下是常见的实现方式: 组件内脚本 在 Vue 单文…

vue实现login

vue实现login

Vue 实现登录功能 在 Vue 中实现登录功能通常需要以下几个步骤: 创建登录表单组件 在 Vue 项目中创建一个登录表单组件,包含用户名和密码输入框以及提交按钮。可以使用 Vue 的模板语法和双…

vue 实现图片

vue 实现图片

Vue 实现图片加载与展示的方法 在 Vue 中实现图片加载和展示可以通过多种方式完成,以下是一些常见的方法: 使用 v-bind 绑定图片路径 通过 v-bind(或简写为 :)动态绑定图片的…