单选题(公共组件)(原生)

本文介绍了一个基于Vue的自定义单选组件实现细节,包括HTML结构、JavaScript逻辑和CSS样式。该组件支持动态数据绑定、状态监听及父组件交互。

html

<div class="commentRadio">
      <div v-for="(item,index) in Obj.tmList" :key="index" class="inputClass">
        <input
          :id="item.id"
          type="radio"
          :disabled="true"
          :value="item.id"
          :checked="item.id===radioVal?true:false"
          @change="changeFun(item.id)"
        >
        <label :for="item.id"></label>
        <span>
          <label :for="item.id">
            {{item.item}}.{{item.title}}
            <a style="color:red;font-size:4vw">({{item.score}}分)</a>
          </label>
        </span>
      </div>
    </div>

js

export default {
  props: ['Obj'],
  data() {
    return {
      radioVal: '',
    }
  },
  watch: {
    radioVal: {
      handler(val) {  
         //拿到后台返回的正确选项显示,单选默认选中
         this.Obj.selectedId = val
         //父组件获取单选题的答案
         this.$emit('getRadioVal', { tmId: this.questionId, radioValue: val })
      },
      deep: true,
      immediate: true
    }
  },
  methods: {
    changeFun(id) {
      this.radioVal = id
    }
  }
}

css

.commentRadio input {
  width: 4.5vw;
  height: 4.5vw;
}
.inputClass {
  position: relative;
  line-height: 10vw;
  margin-left: 15px;
}

.inputClass input[type='radio'] {
  width: 20px;
  height: 20px;
  opacity: 0;
}

.inputClass > label {
  position: absolute;
  left: -2px;
  top: 9px;
  width: 20px;
  height: 20px;
  border-radius: 50%;
  border: 1px solid #999;
}

/*设置选中的input的样式*/
/* + 是兄弟选择器,获取选中后的label元素*/
.inputClass input:checked + label {
  background-color: #f24d4b;
  border: 1px solid #f24d4b;
}

.inputClass input:checked + label::after {
  position: absolute;
  content: '';
  width: 5px;
  height: 10px;
  top: 3px;
  left: 6px;
  border: 2px solid #fff;
  border-top: none;
  border-left: none;
  transform: rotate(45deg);
}
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值