From 1fe96f3edca3ab7c87279b4456612a19ceffa467 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=99=88=E5=98=89=E6=B6=B5?= Date: Mon, 10 Feb 2020 10:57:57 +0800 Subject: [PATCH] feat(Form): binding checkbox --- src/field/index.js | 12 +++++++++++- src/form/demo/index.vue | 6 +++++- src/form/index.js | 2 +- src/mixins/checkbox.js | 3 ++- src/mixins/field.js | 13 +++++++++++++ 5 files changed, 32 insertions(+), 4 deletions(-) create mode 100644 src/mixins/field.js diff --git a/src/field/index.js b/src/field/index.js index cdbf0bff7..a1da6f4a9 100644 --- a/src/field/index.js +++ b/src/field/index.js @@ -15,6 +15,12 @@ const [createComponent, bem] = createNamespace('field'); export default createComponent({ inheritAttrs: false, + provide() { + return { + vanField: this, + }; + }, + inject: { vanForm: { default: null, @@ -111,6 +117,10 @@ export default createComponent({ return { width: addUnit(labelWidth) }; } }, + + formValue() { + return this.children ? this.children.value : this.value; + }, }, methods: { @@ -135,7 +145,7 @@ export default createComponent({ } return !this.rules.some(rule => { - if (rule.required && !this.value) { + if (rule.required && !this.formValue) { this.validateMessage = rule.message; return true; } diff --git a/src/form/demo/index.vue b/src/form/demo/index.vue index ff24d5d0d..b6de21ed3 100644 --- a/src/form/demo/index.vue +++ b/src/form/demo/index.vue @@ -17,7 +17,11 @@ :rules="[{ required: true, message: 'password is required' }]" placeholder="password" /> - + submit diff --git a/src/form/index.js b/src/form/index.js index db6519f24..8eb02fce3 100644 --- a/src/form/index.js +++ b/src/form/index.js @@ -24,7 +24,7 @@ export default createComponent({ getFormData() { return this.fields.reduce((form, field) => { - form[field.name] = field.value; + form[field.name] = field.formValue; return form; }, {}); }, diff --git a/src/mixins/checkbox.js b/src/mixins/checkbox.js index 1b378a0d2..c57228f6b 100644 --- a/src/mixins/checkbox.js +++ b/src/mixins/checkbox.js @@ -2,11 +2,12 @@ * Common part of Checkbox & Radio */ import Icon from '../icon'; +import { FieldMixin } from './field'; import { ChildrenMixin } from './relation'; import { addUnit } from '../utils'; export const CheckboxMixin = ({ parent, bem, role }) => ({ - mixins: [ChildrenMixin(parent)], + mixins: [ChildrenMixin(parent), FieldMixin], props: { name: null, diff --git a/src/mixins/field.js b/src/mixins/field.js new file mode 100644 index 000000000..bf55f9682 --- /dev/null +++ b/src/mixins/field.js @@ -0,0 +1,13 @@ +export const FieldMixin = { + inject: { + vanField: { + default: null, + }, + }, + + created() { + if (this.vanField) { + this.vanField.children = this; + } + }, +};