From ec5684c53ed4b184596d840e51c8390e3b64169b Mon Sep 17 00:00:00 2001 From: chenjiahan Date: Sun, 22 Nov 2020 19:12:27 +0800 Subject: [PATCH] fix(Checkbox): bind-group prop not work #7447 --- src/checkbox-group/index.js | 5 ++++- src/checkbox/Checker.tsx | 3 ++- src/checkbox/index.js | 18 ++++++++++++------ 3 files changed, 18 insertions(+), 8 deletions(-) diff --git a/src/checkbox-group/index.js b/src/checkbox-group/index.js index 26507b082..67818a05a 100644 --- a/src/checkbox-group/index.js +++ b/src/checkbox-group/index.js @@ -30,7 +30,10 @@ export default createComponent({ emit('update:modelValue', []); } else { const names = children - .filter((item) => checked || !item.checked.value) + .filter((item) => { + const willCheck = checked || !item.checked.value; + return item.props.bindGroup && willCheck; + }) .map((item) => item.name); emit('update:modelValue', names); } diff --git a/src/checkbox/Checker.tsx b/src/checkbox/Checker.tsx index 51151b051..0ea3c4bec 100644 --- a/src/checkbox/Checker.tsx +++ b/src/checkbox/Checker.tsx @@ -22,6 +22,7 @@ export default defineComponent({ role: String, parent: Object, checked: Boolean, + bindGroup: Boolean, bem: { type: Function, required: true, @@ -34,7 +35,7 @@ export default defineComponent({ const iconRef = ref(); const getParentProp = (name: string) => { - if (props.parent) { + if (props.parent && props.bindGroup) { return props.parent.props[name]; } return null; diff --git a/src/checkbox/index.js b/src/checkbox/index.js index 59b780e51..8a5cc0198 100644 --- a/src/checkbox/index.js +++ b/src/checkbox/index.js @@ -12,7 +12,6 @@ export const CHECKBOX_KEY = 'vanCheckbox'; export default createComponent({ props: { ...checkerProps, - // TODO bindGroup: { type: Boolean, default: true, @@ -34,27 +33,33 @@ export default createComponent({ if (!overlimit && value.indexOf(name) === -1) { value.push(name); - parent.emit('update:modelValue', value); + + if (props.bindGroup) { + parent.emit('update:modelValue', value); + } } } else { const index = value.indexOf(name); if (index !== -1) { value.splice(index, 1); - parent.emit('update:modelValue', value); + + if (props.bindGroup) { + parent.emit('update:modelValue', value); + } } } }; const checked = computed(() => { - if (parent) { + if (parent && props.bindGroup) { return parent.props.modelValue.indexOf(props.name) !== -1; } return props.modelValue; }); const toggle = (newValue = !checked.value) => { - if (parent) { + if (parent && props.bindGroup) { setParentValue(newValue); } else { emit('update:modelValue', newValue); @@ -68,7 +73,7 @@ export default createComponent({ } ); - useExpose({ toggle, checked }); + useExpose({ toggle, props, checked }); useLinkField(() => props.modelValue); return () => ( @@ -78,6 +83,7 @@ export default createComponent({ role="checkbox" parent={parent} checked={checked.value} + bindGroup={props.bindGroup} onToggle={toggle} {...props} />