结合 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签名功能的步骤 安装签名库 使用vue-signature库可以快速实现签名功能。通过npm或yarn安装: npm install vue-signature --save # 或 y…

vue实现自动翻译

vue实现自动翻译

Vue 实现自动翻译的方法 在 Vue 项目中实现自动翻译功能可以通过多种方式完成,以下是几种常见的方法: 使用第三方翻译 API 注册并获取翻译 API 的密钥(如 Google Translat…

项目基于vue实现

项目基于vue实现

基于Vue实现项目的关键方法 搭建基础环境 安装Node.js和npm/yarn,确保开发环境具备运行Vue的能力。通过Vue CLI快速初始化项目结构,选择所需配置(如Babel、Router、Vu…

vue实现添加用户

vue实现添加用户

Vue 实现添加用户功能 数据绑定与表单设计 在 Vue 中实现添加用户功能,首先需要设计一个表单,用于收集用户输入的数据。通过 v-model 实现双向数据绑定,确保表单数据与 Vue 实例中的数据…

vue实现裁剪头像

vue实现裁剪头像

Vue 实现头像裁剪功能 实现头像裁剪功能通常需要结合第三方库如 cropperjs 或 vue-cropper。以下是两种常见实现方式: 使用 vue-cropper 库 安装依赖: np…

vue单页面实现登录

vue单页面实现登录

实现登录功能的基本流程 在Vue单页面应用中实现登录功能,通常需要以下几个关键步骤: 创建登录表单组件 使用Vue的模板语法创建包含用户名和密码输入框的表单,并绑定数据到组件的data属性。 &l…