<template>
<el-checkbox-group v-model="checkList">
<el-checkbox label="复选框 A"></el-checkbox>
<el-checkbox label="复选框 B"></el-checkbox>
<el-checkbox label="复选框 C"></el-checkbox>
<el-checkbox label="禁用" disabled></el-checkbox>
<el-checkbox label="选中且禁用" disabled></el-checkbox>
</el-checkbox-group>
</template>
<script>
export default {
data () {
return {
checkList: ['选中且禁用','复选框 A']
</script>
属性: v-model双向绑定值, 且为数组类型
方法: change事件,双向绑定的值value发生变化后的回调
如何将checkbox-group的值传递给checkbox子组件?-- 子组件通过向上追溯找到父组件checkbxo-group
子组件checkbox值发生变化后, 如何通知父组件checkbox-group更新value值?
<template>
<p>checkbox-group</p>
<y-checkbox-group v-model="checkboxGroupOptions" @change="handleCheckboxChange">
<y-checkbox
v-for="(item, index) in checkboxGroupPem"
:key="index"
:label="item.id">
{{item.name}}
</y-checkbox>
</y-checkbox-group>
</div>
</template>
<script>
export default {
data() {
return {
checkboxGroupOptions: ["1"],
checkboxGroupPem: [
id: "1",
name: '杭州',
id: "2",
name: '上海',
id: "3",
name: '北京',
methods: {
handleCheckboxChange(data) {
console.log('handleCheckboxChange', data);
watch: {
checkboxGroupOptions() {
console.log('checkboxGroupOptions', this.checkboxGroupOptions)
</script>
可用于权限控制, checkboxGroupOptions
绑定默认的权限, checkboxGroupPem
菜单项所拥有的权限
checkboxGroupOptions
多选框选中绑定的数组, checkboxGroupPem
为渲染的多选框列表
checkbox-group
<template>
<!-- checkbox-group
属性: v-model双向绑定值, 且为数组类型
方法: change事件,双向绑定的值value发生变化后的回调
如何将checkbox-group的值传递给checkbox子组件?-- 子组件通过向上追溯找到父组件checkbxo-group
子组件checkbox值发生变化后, 如何通知父组件checkbox-group更新value值?
class="y-checkbox-group"
role="checkboxgroup">
<slot></slot>
</div>
</template>
<script>
export default {
name: 'YCheckboxGroup',
componentName: 'YCheckboxGroup',
props: {
value: {},
</script>
checkbox 组件修改
<script>
import Emitter from '../../../src/mixins/emitter';
export default {
name: 'YCheckbox',
props: {
value: {},
label: {},
indeterminate: Boolean,
mixins: [Emitter],
computed: {
isGroup() {
let parent = this.$parent;
while (parent) {
if(parent.$options.componentName !== 'YCheckboxGroup') {
parent = parent.$parent;
}else {
this._checkboxGroup = parent;
console.log('_checkboxGroup', this._checkboxGroup);
return true;
return false;
model: {
get() {
return this.isGroup ? this._checkboxGroup.value : this.value;
set(val) {
if(this.isGroup) {
console.log('model发生了变化', val, this.label);
this.dispatch('YCheckboxGroup', 'input', [val]);
}else {
this.$emit('input', val);
this.$refs.checkbox && (this.$refs.checkbox.checked = this.isChecked);
isChecked() {
if({}.toString.call(this.model) === '[object Boolean]') {
console.log('hhhh', this.model);
return this.model;
else if(Array.isArray(this.model)) {
return this.model.indexOf(this.label) > -1;
methods: {
handleChange() {
this.$nextTick(()=>{
this.$emit('change', this.model, this._checkboxGroup);
if(this.isGroup) {
this.dispatch('YCheckboxGroup', 'change', [this._checkboxGroup.value]);
</script>
这里主要修该了model
值更改后的处理以及handleChange
增加对checkbox-group绑定的cahnge事件的响应
增加父组件checkbox-group的判断, 以获取其value值(vm.parent和vm.options)
vm.$parent, 父实例,如果当前实例有的话
vm.$options, 用于当前 Vue 实例的初始化选项
vm.$parent, 获取当前实例的父实例
vm.$options, 获取当前实例的初始化数据
多选框组可用于权限控制, 但需要注意父节点的选中状态和子节点选中状态的响应
多选框组下,选中或取消选中某个多选框,model更新,且新值val为什么可以自动增删?(见下文补充)
v-model在checkbox中的作用是监听用户的输入事件以更新数据
<template>
<p>inputValue: {{valueBool}}</p>
<input type="checkbox" :value="inputValue" v-model="valueBool" />
<p>inputValue: {{valueString}}</p>
<input type="checkbox" :value="inputValue" v-model="valueString" />
<p>inputValue: {{valueArray}}</p>
<input type="checkbox" :value="inputValue" v-model="valueArray" />
</div>
<template>
<script>
export default {
data() {
inputValue: "2",
valueBool: true,
valueString: "string",
valueArray: ["1", "2", "3"],
</script>
如果v-model绑定值是布尔值, 若为true, 则默认选中; 否则不选中
如果v-model绑定值是字符串, 若转为布尔为true, 则默认选中; 否则不选中
如果v-model绑定值是数组, 若该数组中含有inputValue值, 则默认选中; 否则不选中
多选框手动勾选
如果v-model绑定值是布尔值, 勾选则为true
如果v-model绑定值是字符串,勾选则为true
如果v-model绑定值是数组, 勾选则将该多选框对应的value插入到该数组
多选框手动取消勾选
如果v-model绑定值是布尔值, 取消勾选则为false
如果v-model绑定值是字符串,取消勾选则为false
如果v-model绑定值是数组, 取消勾选则将该多选框对应的value从该数组中删除
原生多选框实际上也是input输入框
若绑定值为字符串或布尔类型, 当取消勾选时输入框内容为空, 即多选框的checked为false; 勾选上,即多选框的checked为为true
若绑定值为数组, 取消勾选是将该值从数组中剔除; 勾选上是将该值push到数组