From bfa648b13b43e79aeeb53ea8c3a203aa763fa2f5 Mon Sep 17 00:00:00 2001 From: rex Date: Wed, 12 Feb 2020 12:04:43 +0800 Subject: [PATCH] fix(Checkbox): support set disabled dynamic (#2748) fix #2742 --- packages/checkbox-group/index.ts | 10 ++++++---- packages/checkbox/index.ts | 12 ++++++++---- packages/checkbox/index.wxml | 7 ++++--- packages/checkbox/index.wxs | 20 ++++++++++++++++++++ 4 files changed, 38 insertions(+), 11 deletions(-) create mode 100644 packages/checkbox/index.wxs diff --git a/packages/checkbox-group/index.ts b/packages/checkbox-group/index.ts index b25e3187..be5cff64 100644 --- a/packages/checkbox-group/index.ts +++ b/packages/checkbox-group/index.ts @@ -1,5 +1,7 @@ import { VantComponent } from '../common/component'; +type TrivialInstance = WechatMiniprogram.Component.TrivialInstance; + VantComponent({ field: true, @@ -13,7 +15,7 @@ VantComponent({ }, unlinked(target) { this.children = this.children.filter( - (child: WechatMiniprogram.Component.TrivialInstance) => child !== target + (child: TrivialInstance) => child !== target ); } }, @@ -32,16 +34,16 @@ VantComponent({ methods: { updateChildren() { - (this.children || []).forEach((child: WechatMiniprogram.Component.TrivialInstance) => + (this.children || []).forEach((child: TrivialInstance) => this.updateChild(child) ); }, - updateChild(child: WechatMiniprogram.Component.TrivialInstance) { + updateChild(child: TrivialInstance) { const { value, disabled } = this.data; child.setData({ value: value.indexOf(child.data.name) !== -1, - disabled: disabled || child.data.disabled + parentDisabled: disabled }); } } diff --git a/packages/checkbox/index.ts b/packages/checkbox/index.ts index f9b30f99..0e040aa4 100644 --- a/packages/checkbox/index.ts +++ b/packages/checkbox/index.ts @@ -38,6 +38,10 @@ VantComponent({ } }, + data: { + parentDisabled: false + }, + methods: { emitChange(value: boolean) { if (this.parent) { @@ -48,15 +52,15 @@ VantComponent({ }, toggle() { - const { disabled, value } = this.data; - if (!disabled) { + const { parentDisabled, disabled, value } = this.data; + if (!disabled && !parentDisabled) { this.emitChange(!value); } }, onClickLabel() { - const { labelDisabled, disabled, value } = this.data; - if (!disabled && !labelDisabled) { + const { labelDisabled, parentDisabled, disabled, value } = this.data; + if (!disabled && !labelDisabled && !parentDisabled) { this.emitChange(!value); } }, diff --git a/packages/checkbox/index.wxml b/packages/checkbox/index.wxml index 19a89260..94789d81 100644 --- a/packages/checkbox/index.wxml +++ b/packages/checkbox/index.wxml @@ -1,4 +1,5 @@ + @@ -7,13 +8,13 @@ wx:else name="success" size="0.8em" - class="{{ utils.bem('checkbox__icon', [shape, { disabled, checked: value }]) }}" - style="font-size: {{ utils.addUnit(iconSize) }};{{ checkedColor && value && !disabled ? 'border-color:' + checkedColor + '; background-color:' + checkedColor : '' }}" + class="{{ utils.bem('checkbox__icon', [shape, { disabled: disabled || parentDisabled, checked: value }]) }}" + style="{{ computed.iconStyle(checkedColor, value, disabled, parentDisabled, iconSize) }}" custom-class="icon-class" custom-style="line-height: 1.25em;" /> - + diff --git a/packages/checkbox/index.wxs b/packages/checkbox/index.wxs new file mode 100644 index 00000000..927eb55d --- /dev/null +++ b/packages/checkbox/index.wxs @@ -0,0 +1,20 @@ +/* eslint-disable */ +var utils = require('../wxs/utils.wxs'); + +function iconStyle(checkedColor, value, disabled, parentDisabled, iconSize) { + var styles = [['font-size', utils.addUnit(iconSize)]]; + if (checkedColor && value && !disabled && !parentDisabled) { + styles.push(['border-color', checkedColor]); + styles.push(['background-color', checkedColor]); + } + + return styles + .map(function(item) { + return item.join(':'); + }) + .join(';'); +} + +module.exports = { + iconStyle: iconStyle +};