fix
parent
b3351a5f7f
commit
e0c4090e85
|
@ -14,10 +14,14 @@ export default {
|
||||||
default: 'ant-checkbox-group',
|
default: 'ant-checkbox-group',
|
||||||
type: String,
|
type: String,
|
||||||
},
|
},
|
||||||
value: {
|
defaultValue: {
|
||||||
default: () => [],
|
default: () => [],
|
||||||
type: Array,
|
type: Array,
|
||||||
},
|
},
|
||||||
|
value: {
|
||||||
|
default: undefined,
|
||||||
|
type: Array,
|
||||||
|
},
|
||||||
options: {
|
options: {
|
||||||
default: () => [],
|
default: () => [],
|
||||||
type: Array,
|
type: Array,
|
||||||
|
@ -26,9 +30,15 @@ export default {
|
||||||
model: {
|
model: {
|
||||||
prop: 'value',
|
prop: 'value',
|
||||||
},
|
},
|
||||||
|
data () {
|
||||||
|
const { value, defaultValue } = this
|
||||||
|
return {
|
||||||
|
stateValue: value || defaultValue,
|
||||||
|
}
|
||||||
|
},
|
||||||
computed: {
|
computed: {
|
||||||
checkedStatus () {
|
checkedStatus () {
|
||||||
return new Set(this.value)
|
return new Set(this.stateValue)
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
created () {
|
created () {
|
||||||
|
@ -40,17 +50,22 @@ export default {
|
||||||
return false
|
return false
|
||||||
}
|
}
|
||||||
const target = event.target
|
const target = event.target
|
||||||
const { value, checked } = target
|
const { value: targetValue, checked } = target
|
||||||
|
const { stateValue, value } = this
|
||||||
let newVal = []
|
let newVal = []
|
||||||
if (checked) {
|
if (checked) {
|
||||||
newVal = [...this.value, value]
|
newVal = [...stateValue, targetValue]
|
||||||
} else {
|
} else {
|
||||||
newVal = [...this.value]
|
newVal = [...stateValue]
|
||||||
const index = newVal.indexOf(value)
|
const index = newVal.indexOf(targetValue)
|
||||||
index >= 0 && newVal.splice(index, 1)
|
index >= 0 && newVal.splice(index, 1)
|
||||||
}
|
}
|
||||||
this.$emit('input', [...new Set(newVal)])
|
newVal = [...new Set(newVal)]
|
||||||
this.$emit('change', [...new Set(newVal)])
|
if (value === undefined) {
|
||||||
|
this.stateValue = newVal
|
||||||
|
}
|
||||||
|
this.$emit('input', newVal)
|
||||||
|
this.$emit('change', newVal)
|
||||||
},
|
},
|
||||||
setChildCheckbox (children = []) {
|
setChildCheckbox (children = []) {
|
||||||
const { options, $slots, checkedStatus } = this
|
const { options, $slots, checkedStatus } = this
|
||||||
|
@ -75,6 +90,7 @@ export default {
|
||||||
},
|
},
|
||||||
watch: {
|
watch: {
|
||||||
value (val) {
|
value (val) {
|
||||||
|
this.stateValue = val
|
||||||
this.setChildCheckbox(this.$slots.default)
|
this.setChildCheckbox(this.$slots.default)
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
|
|
|
@ -2,7 +2,7 @@
|
||||||
<label :class="classes">
|
<label :class="classes">
|
||||||
<span :class="checkboxClass">
|
<span :class="checkboxClass">
|
||||||
<input :name="name" type="checkbox" :disabled="disabled"
|
<input :name="name" type="checkbox" :disabled="disabled"
|
||||||
:class="`${prefixCls}-input`" :checked="!!checked"
|
:class="`${prefixCls}-input`" :checked="stateChecked"
|
||||||
@change="handleChange"
|
@change="handleChange"
|
||||||
/>
|
/>
|
||||||
<span :class="`${prefixCls}-inner`" />
|
<span :class="`${prefixCls}-inner`" />
|
||||||
|
@ -20,7 +20,8 @@ export default {
|
||||||
default: 'ant-checkbox',
|
default: 'ant-checkbox',
|
||||||
type: String,
|
type: String,
|
||||||
},
|
},
|
||||||
checked: Boolean,
|
defaultChecked: Boolean,
|
||||||
|
checked: { type: Boolean, default: undefined },
|
||||||
disabled: Boolean,
|
disabled: Boolean,
|
||||||
isGroup: Boolean,
|
isGroup: Boolean,
|
||||||
value: [String, Number, Boolean],
|
value: [String, Number, Boolean],
|
||||||
|
@ -31,6 +32,12 @@ export default {
|
||||||
model: {
|
model: {
|
||||||
prop: 'checked',
|
prop: 'checked',
|
||||||
},
|
},
|
||||||
|
data () {
|
||||||
|
const { checked, defaultChecked } = this
|
||||||
|
return {
|
||||||
|
stateChecked: checked === undefined ? defaultChecked : checked,
|
||||||
|
}
|
||||||
|
},
|
||||||
computed: {
|
computed: {
|
||||||
hasDefaultSlot () {
|
hasDefaultSlot () {
|
||||||
return !!this.$slots.default
|
return !!this.$slots.default
|
||||||
|
@ -42,10 +49,10 @@ export default {
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
checkboxClass () {
|
checkboxClass () {
|
||||||
const { prefixCls, indeterminate, checked, disabled } = this
|
const { prefixCls, indeterminate, stateChecked, disabled } = this
|
||||||
return {
|
return {
|
||||||
[`${prefixCls}`]: true,
|
[`${prefixCls}`]: true,
|
||||||
[`${prefixCls}-checked`]: checked,
|
[`${prefixCls}-checked`]: stateChecked,
|
||||||
[`${prefixCls}-disabled`]: disabled,
|
[`${prefixCls}-disabled`]: disabled,
|
||||||
[`${prefixCls}-indeterminate`]: indeterminate,
|
[`${prefixCls}-indeterminate`]: indeterminate,
|
||||||
}
|
}
|
||||||
|
@ -55,13 +62,16 @@ export default {
|
||||||
},
|
},
|
||||||
methods: {
|
methods: {
|
||||||
handleChange (event) {
|
handleChange (event) {
|
||||||
const checked = event.target.checked
|
const targetChecked = event.target.checked
|
||||||
this.$emit('input', checked)
|
this.$emit('input', targetChecked)
|
||||||
const { name, value } = this
|
const { name, value, checked } = this
|
||||||
|
if (checked === undefined) {
|
||||||
|
this.stateChecked = targetChecked
|
||||||
|
}
|
||||||
const target = {
|
const target = {
|
||||||
name,
|
name,
|
||||||
value,
|
value,
|
||||||
checked,
|
checked: targetChecked,
|
||||||
}
|
}
|
||||||
this.$emit('change', {
|
this.$emit('change', {
|
||||||
target,
|
target,
|
||||||
|
@ -77,5 +87,10 @@ export default {
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
|
watch: {
|
||||||
|
checked (val) {
|
||||||
|
this.stateChecked = val
|
||||||
|
},
|
||||||
|
},
|
||||||
}
|
}
|
||||||
</script>
|
</script>
|
||||||
|
|
|
@ -1,8 +1,9 @@
|
||||||
<template>
|
<template>
|
||||||
<div>
|
<div>
|
||||||
<Checkbox :checked="true" @change="change" name="test" value="123" />
|
<Checkbox :defaultChecked="true" @change="change" value="1">1</Checkbox>
|
||||||
|
<Checkbox v-model="checked" @change="change" value="2">2</Checkbox>
|
||||||
<Checkbox @change="change" v-model="checked" name="test" value="123">Checkbox</Checkbox>
|
<Checkbox @change="change" v-model="checked" name="test" value="123">Checkbox</Checkbox>
|
||||||
<Checkbox :disabled="true" @change="change" v-model="checked" name="test2" value="222">Checkbox</Checkbox>
|
<Checkbox @change="change" v-model="checked" name="test2" value="222">Checkbox</Checkbox>
|
||||||
|
|
||||||
<CheckboxGroup v-model="value" @change="change">
|
<CheckboxGroup v-model="value" @change="change">
|
||||||
<AntButton @click="handleClick">
|
<AntButton @click="handleClick">
|
||||||
|
@ -18,7 +19,7 @@
|
||||||
<Checkbox name="test3" value="3" @change="change">Checkbox3</Checkbox>
|
<Checkbox name="test3" value="3" @change="change">Checkbox3</Checkbox>
|
||||||
<Checkbox v-if="showMore" name="test4" value="4">Checkbox4</Checkbox>
|
<Checkbox v-if="showMore" name="test4" value="4">Checkbox4</Checkbox>
|
||||||
</CheckboxGroup>
|
</CheckboxGroup>
|
||||||
<CheckboxGroup :options="options" v-model="value1" @change="change"></CheckboxGroup>
|
<CheckboxGroup :options="options" :defaultValue="['Apple']" @change="change"></CheckboxGroup>
|
||||||
</div>
|
</div>
|
||||||
</template>
|
</template>
|
||||||
<script>
|
<script>
|
||||||
|
|
Loading…
Reference in New Issue