自定义vue radio控件

如何使用vue自定义radio控件?

背景

原生浏览器的radio控件的样式谁用谁知道,一个字丑! 所以今天要使用vue之间封装一个美美哒的radio控件.

实现功能

  1. 自定义v-model,使组件之间数据能够进行双向绑定.
  2. 使用checked属性默认选中radio
  3. 使用disabled属性禁用radio
  4. 当用户点击radio时触发组件上绑定的change事件

代码实现

  1. 定义脚本
<script>
export default {
  name:'ui-radio',//radio组件名称
  model: {//自定义 v-model的 prop和event,这个定义的意思就是使用change事件更新model的值,以此来实时更新v-model的值
    prop: 'model',
    event: 'change'
  },
  props:{
    value:{//radio的value属性
      type:[String,Number],
      require:true
    },
    model:{//这里的model指的是上面定义的v-model的prop
      type:[String,Number],
      require:true
    },
    checked:{//是否默认选中
      type:Boolean,
      default:false
    },
    disabled:{//是否禁用
      type:Boolean,
      default:false
    }
  },
  mounted:function(){//当dom渲染完成,判断组件是否默认选中
    if(this.checked===true)
      this.updateVal();
  },
  methods:{
    updateVal:function(){//当用户点击radio时,触发change事件更新v-model
      this.$emit('change',this.$refs.radio.value);
    }
  }
}
</script>
  1. 定义组件模板
<template>
  <!--这里设置了选中后的radio样式类,和禁用后的样式类-->
  <label class="ui-radio" :class="{'checked':model==value,'disabled':disabled}">
    <input type="radio" ref="radio" :value="value" @click="updateVal" :disabled="disabled">
  </label>
</template>
  1. 定义样式(样式就不再细说了,可以在博客底部打开code sandbox 自己调试)
<style>
.ui-radio{
  width: 14px;
  height: 14px;
  border-radius: 50%;
  border: 1px solid #4693fe;
  display: inline-block;
  position: relative;
}
.ui-radio.disabled{
  border-color: #ccc;
}
.ui-radio::after{
  content: '';
  width: 10px;
  height: 10px;
  border-radius: 50%;
  display: inline-block;
  position: absolute;
  left: 50%;
  top: 50%;
  margin: -5px 0 0 -5px;
  background-color: #4693fe;  
  transition: all .5s ease;
  opacity: 0;
  transform: scale(0);
}
.ui-radio.disabled::after{
  background-color: #ccc;
}
.ui-radio.checked::after {
   opacity: 1;
   transform: scale(1);
}
.ui-radio input[type=radio]{
  opacity: 0;
  margin: 0;
}
</style>

效果和示例代码##


CSDN markdown 禁用了iframe, 有翻墙工具的可以点击codesandbox demo.

Vue自定义一个Radio组件可以提高用户界面的美观性和一致性,同时也能根据实际需求调整功能。以下是创建一个基本自定义Radio组件的步骤和考虑因素: 1. 创建Radio组件的结构:使用Vue单文件组件(.vue)来定义你的Radio组件,包括模板(template)、脚本(script)和样式(style)部分。 2. 定义模板:模板中可以包含一个`<input type="radio">`元素,并且通过`:id`和`:name`来绑定其标识和名称。同时,可以使用`<label>`元素包裹显示的文本,通过`for`属性关联`<input>`的`id`。 3. 使用v-model进行数据绑定:通过Vue的`v-model`指令将Radio组件的选中状态与Vue实例的某个数据属性绑定。这样可以实现双向数据绑定,当Radio组件状态改变时,Vue实例的数据也会相应变化。 4. 样式定制:使用CSS来定义Radio组件的样式,包括未选中和选中时的不同状态。可以使用Vue的动态类绑定(例如`v-bind:class`)来根据组件的状态动态应用样式。 5. 处理Radio组:当需要多个Radio选项构成一个选择组时,确保它们共享同一个`v-model`绑定的值,同时使用`:value`属性来区分各个选项的值。 一个简单的Vue自定义Radio组件示例可能如下所示: ```vue <template> <div class="custom-radio"> <input type="radio" :id="radioId" :name="radioName" :value="value" v-model="radioModel"> <label :for="radioId">{{ label }}</label> </div> </template> <script> export default { props: { value: { type: [String, Number], required: true }, label: { type: String, required: true }, radioId: { type: String, required: true }, radioName: { type: String, required: true }, radioModel: { type: [String, Number], required: true } } }; </script> <style scoped> .custom-radio input[type="radio"] { /* 自定义radio输入框的样式 */ } .custom-radio label { /* 自定义label的样式 */ } </style> ``` 在使用自定义Radio组件时,你可以像这样使用它: ```vue <custom-radio v-model="selected" :label="男" :value="1" :radioId="'maleRadio'" :radioName="'gender'"></custom-radio> <custom-radio v-model="selected" :label="女" :value="2" :radioId="'femaleRadio'" :radioName="'gender'"></custom-radio> ``` 通过以上步骤和代码,你可以在Vue项目中创建和使用自定义Radio组件
评论 8
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值