自定义checkbox组件


需求


  1. 适用场景-条件搜索
  2. 选择的"所有"的选项,其他子选项取消选择
  3. 选择了子选项,"所有"选项取消选择
  4. 默认选择所有,跟后台协商好了选择所有传null,可以根据自己的情况修改

效果图



代码


<template>
  <div>
    <label class="label">
      <input
        v-model="arr"
        type="checkbox"
        class="label-checkbox"
        :value="null"
        @click="selectAll"
      />
      <span class="label-triangle"></span>
      <span class="label-text">所有</span>
    </label>
    <label class="label" v-for="item of options" :key="item.key">
      <input
        v-model="arr"
        type="checkbox"
        class="label-checkbox"
        :value="item.key"
        @click="spliceAll"
      />
      <span class="label-triangle"></span>
      <span class="label-text">{{ item.label }}</span>
    </label>
  </div>
</template>

<script>
export default {
  props: {
    options: Array
  },
  data() {
    return {
      arr: [null],
      checked: false
    };
  },
  methods: {
    selectAll() {
      const index = this.arr.indexOf(null);
      if (index == -1) {
        this.arr = [null];
      }
    },
    spliceAll() {
      const index = this.arr.indexOf(null);
      if (index > -1) {
        this.arr.splice(index, 1);
      }
    },
    getArr() {
      this.$emit("getArr", this.arr);
      console.log(this.arr);
    }
  }
};
</script>

<style scoped lang="scss">
//多选框的样式
.label {
  float: left;
  display: flex;
  height: 30px;
  line-height: 30px;
  align-items: center;
  justify-content: center;
  margin-right: 20px;
  cursor: pointer;
  .label-checkbox {
    width: 0;
    height: 0;
    opacity: 0;
  }
  .label-triangle {
    display: inline-block;
    height: 16px;
    width: 16px;
    border: 1px solid $border1;
    border-radius: 2px;
    margin-right: 4px;
    position: relative;
    &:after {
      content: "";
      background-image: url("../../../../img/check.png");
      background-size: 100%;
      display: block;
      color: #000;
      position: absolute;
      top: 0;
      bottom: 0;
      right: 0;
      left: 0;
    }
  }
  .label-text {
    font-weight: normal;
    color: $text3;
    &:hover {
      color: $mtc;
    }
  }
  .label-checkbox {
    &:checked {
      + .label-triangle {
        border-color: $mtc-hover;
        background: $mtc;
        + .label-text {
          color: $mtc;
        }
      }
    }
  }
}
</style>
复制代码
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值