Element-ui 之 Checkbox-Group 组件的源码分析

上一篇文章分析了element-uiCheckbox组件的源代码。Element-ui 之 Checkbox 组件的源码分析

此篇文章将从Checkbox-Group组件提供的属性和事件的角度,逐步分析element-uiCheckbox-Group组件源代码,从而介绍如何实现一个完整的Checkbox-Group组件。

一. Checkbox-Group 组件提供的属性和事件

1.1 属性

以下是 checkbox-Group 组件提供的属性:

参数 说明 类型 可选值 默认值
value / v-model 绑定值 array
size 多选框组尺寸,仅对按钮形式的 Checkbox 或带有边框的 Checkbox 有效 string medium / small / mini
disabled 是否禁用 boolean false
min 可被勾选的 checkbox 的最小数量 number
max 可被勾选的 checkbox 的最大数量 number
text-color 按钮形式的 Checkbox 激活时的文本颜色 string #ffffff
fill 按钮形式的 Checkbox 激活时的填充色和边框色 string #409EFF

1.2 事件

事件名称 说明 回调参数
change 当绑定值变化时触发的事件 更新后的值

二. 按照步骤去实现 Checkbox-Group 组件的属性和事件

  1. 注册组件。
  2. checkbox-group 的基本 template 部分。
  3. 绑定值 v-model 的处理。
  4. 禁用 disabled 属性的处理。
  5. 可被勾选的最小数量 min,最大数量 max 的处理。
  6. 尺寸 size 属性的处理。
  7. 接收 text-colorfill 属性,用于后续讲解的 checkbox-button 组件。

三. Checkbox 组件属性和事件的具体实现

3.1 注册组件

新建一个 checkbox-group.vue 文件,设置组件的 namecomponentName 都为 ElCheckboxGroup

main.js 文件里面引入这个组件,并且使用 Vue.component 来全局注册这个组件。

3.2 checkbox-group 的基本 template 部分

<template>
  <div class="el-checkbox-group" role="group" aria-label="checkbox-group">
    <slot></slot>
  </div>
</template>
<script>
export default {
     
     
  name: 'ElCheckboxGroup',

  componentName: 'ElCheckboxGroup',
}
</script>
  • 一个 div 标签内部包裹父组件内部传过来的内容,div 设置属性 role="group"aria-label="checkbox-group"
  • aria-label 属性为无障碍 API,用来给元素增加标签描述,接收字符串为参数。

3.3 绑定值 v-model 的处理

实现步骤:

  1. 新建一个文件,文件内部引入 checkbox-group 组件,并且在 checkbox-group 组件内容写入三个 checkbox 组件,给 checkbox 组件增加 label 属性,checkbox-group 组件增加 v-model 绑定值。
<template>
  <el-checkbox-group v-model="checkList">
    <el-checkbox :label="1">备选项1</el-checkbox>
    <el-checkbox :label="2">备选项2</el-checkbox>
    <el-checkbox :label="3">备选项3</el-checkbox>
  </el-checkbox-group>
</template>
<script>
export default {
     
     
  data() {
     
     
    return {
     
     
      checkList: [1]
    }
  }
}
</script>
  1. checkbox-group 组件中用 props 使用默认的 value 属性用来接收 v-model 的绑定值。
props: {
   
   
  value: {
   
   }
}
  1. checkbox 组件中设置计算属性 isGroup 来判断该多选框是否被包含在多选框组里面。如果被包含在多选框组里面,则用变量 _checkboxGroup 保存多选框组的信息。
isGroup() {
   
   
  // parent 变量保存组件的父级元素信息
  let parent = this.$parent;
  while (parent) {
   
   
    if (parent.$options.componentName !== 'ElCheckboxGroup') {
   
   
      // 如果父级的 componentName 不是 ElCheckboxGroup 则继续向上查找
      parent = parent<
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值