【组件封装】实现一个三种状态的勾选框

show1.jpg

三种状态的勾选框

日常开发中,我们经常使用勾选框,无非是两种状态:选中、未选中;

本文的组件,实现三种状态:未选中、半选、已选中;

通过案例,感受vue中 model 的使用场景

调用效果及代码

不断点击勾选框,在未选中、半选、已选中三种状态之间切换

show2.gif
<!--
 * @Date: 2022-05-24 10:11:48
 * @Author: surewinT 840325271@qq.com
 * @LastEditTime: 2022-05-24 11:08:26
 * @LastEditors: surewinT 840325271@qq.com
 * @Description: 调用页面
-->
<template>
  <div class="">
    <p-three-checkbox :data="checkboxData" v-model="value" />
  </div>
</template>

<script>
import PThreeCheckbox from '@/components/p-three-checkbox';
export default {
  components: {
    'p-three-checkbox': PThreeCheckbox,
  },
  props: [],
  data() {
    return {
      checkboxData: {
        label: '哈哈哈',
        disabled: false,
      },
      value: 0,
    };
  },
  mounted() {},
  watch: {
    value() {
      console.log('变化了:', this.value);
    },
  },
  methods: {},
};
</script>

<style lang='scss' scoped>
</style>

组件源码

model 可以设置 v-model 的绑定值,使用数据双向传递;

用 num 记录勾选,在0、1、2三种状态间,来回切换;

<!--
 * @Author: surewinT 840325271@qq.com
 * @LastEditTime: 2022-05-24 10:52:13
 * @LastEditors: surewinT 840325271@qq.com
 * @Description: '具备三个状态'的勾选框组件
-->

<template>
  <span class="stateCheckBox">
    <el-checkbox
      v-model="check"
      :indeterminate="mid"
      :disabled="data.disabled"
      @change="change"
    >
      <span
        class="label"
        :class="[check ? 'active' : '', data.disabled ? 'disabled' : '']"
        >{{ data.label }}</span
      >
    </el-checkbox>
  </span>
</template>

<script>
/**
 * @description: props 说明
 * data {
 *  label: 显示的值,
 *  disabled:是否禁用
 * }
 */
export default {
  components: {},
  model: {
    prop: 'value',
    event: 'input',
  },
  props: {
    value: {
      type: Number,
      default: 0,
    },
    data: {
      type: Object,
      default: () => {
        return {};
      },
    },
  },
  data() {
    return {
      check: false,
      mid: false,
      num: 0,
    };
  },
  mounted() {
    this.loadState(this.value);
  },
  watch: {
    num() {
      this.$emit('input', this.num);
    },
  },
  methods: {
    // 初始化状态
    loadState(num) {
      this.num = Number(num);
      this.chooseState(this.num);
    },
    // 改变状态
    chooseState(num) {
      this.check = num == 2 ? true : false;
      this.mid = num == 1 ? true : false;
    },
    // 点击多选框
    change() {
      this.num++;
      this.num > 2 ? (this.num = 0) : '';
      this.chooseState(this.num);
    },
  },
};
</script>

<style lang="scss" scoped>
.stateCheckBox {
  margin-right: 30px;
  .label {
    color: #606266;
  }
  .active {
    color: #409eff;
  }
  .disabled {
    color: #c0c4cc;
  }
}
</style>

仓库源码

后续补充

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 217,084评论 6 503
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,623评论 3 392
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 163,450评论 0 353
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,322评论 1 293
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,370评论 6 390
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,274评论 1 300
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,126评论 3 418
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,980评论 0 275
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,414评论 1 313
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,599评论 3 334
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,773评论 1 348
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,470评论 5 344
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,080评论 3 327
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,713评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,852评论 1 269
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,865评论 2 370
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,689评论 2 354

推荐阅读更多精彩内容