element源码分析-checkbox多选框,感觉逻辑跟单选框很像,来看看吧。
checkbox多选框和单选框一样也分为三部分
- checkbox-group:适用于多个勾选框绑定到同一个数组的情景,通过是否勾选来表示这一组选项中选中的项。
- checkbox:多选。
- checkbox-button: 按钮样式的多选。
checkbox-group
相当于把checkbox和checkboxButton形成一个组
结构
1 | <div class="el-checkbox-group" role="group" aria-label="checkbox-group"> |
script部分
1.接收form组件注入
默认为空,若在form组件中嵌套使用并form组件注入了elFormItem则有值
1 | inject: { |
2.注入的内容会在computed中使用
1 | computed: { |
checkboxGroupSize会在checkbox
和checkboxButton
中用到
3.监听value
1 | watch: { |
4.props接收的属性
1 | props: { |
有些属性checkbox和checkboxButton组件会用到
checkbox
结构
1.外层label: 控制外层样式
1 | <label |
- role,aria-checked,aria-disabled:无障碍网页应用属性(用于读屏)
- aria-checked: true代表选中,false代表未选中,mixed代表:元素指示选定和未选择状态 。
2.内层第一个span选择框
1 | <span class="el-checkbox__input" |
- 外层span控制选择框的选中未被选中样式
- 隐藏的input模拟checkbox: 分为有传入trueLable或falseLable与无两种结构
3.内层第二个span-选择框对应的内容
1 | <span class="el-checkbox__label" v-if="$slots.default || label"> |
script部分
从生命周期开始
1 | created() { |
addToStore方法
1 | addToStore() { |
一些计算属性
- 是否被选中
1 | // 是否被选中 |
- 是否在多选组中嵌套使用
1 | // 向上找checkbox-group组件找到返回true 未找到返回false |
- 控制样式的几个属性
1 | isDisabled() { |
- value
1 | // checkbox-group组件实例的value或当前value |
- v-model对应的值
1 | // v-model的值 |
- isLimitExceeded: 是否突破限制 与checkbox-group的min和max有关
- selfModel: 没有在多选组中使用的model值,默认false
input的change事件
1 | // input的change事件 |
监听value,与表单验证相关
1 | watch: { |
- dispatch: 从mixins混入进来的方法,向上寻找(指定组件,发布指定事件,暴露指定值)
1 | import Emitter from 'element-ui/src/mixins/emitter' |
checkbox-button
与checkbox基本一致,多了button相关样式,computed中的activeStyle,受checkbox-group的fill控制