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

子组件

html

<div class="commentRadio">
      <div v-for="(con,i) in Obj.tmList" :key="i+'r'" class="inputClass">
        <input
          :id="con.id"
          type="checkbox"
          :value="con.id"
          v-model="checklist"
          :disabled="false"
        >
        <label :for="con.id"></label>
        <span>
          <label :for="con.id" style="margin-left:30px">
            {{con.item}}.{{con.title}}
            <a style="color:red;font-size:4vw">({{con.score}}分)</a>
          </label>
        </span>
      </div>
  </div>

js

export default {
  props: ['Obj'],
  data() {
    return {
      checklist: [],
      subjectId: ''
    }
  },
  watch: {
    Obj: {
      handler(val) {
          this.questionId = val.id
          if (!val.selectedId) {
            this.checklist = []
          } else {
            if (typeof val.selectedId === 'string') {
              this.checklist = this.strAndArr(val.selectedId)
            }
            if (typeof val.selectedId === 'object') {
              this.checklist = val.selectedId
            }
          }
      },
      deep: true,
      immediate: true
    },
    checklist: {
      handler(val) {
        this.Obj.selectedId = val
        this.$emit('getCheckboxVal', {
          tmId: this.questionId,
          checkValues: val
        })
      },
      deep: true,
      immediate: true
    }
  },
  created() {
    this.stateValue = sessionStorage.getItem('stateValue')
  },
  methods: {
    // 字符串转数组
    strAndArr(str) {
      return str.split(',')
    }
  }
}

css

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

.inputClass input[type='checkbox'] {
  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);
}
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值