feat(Form): add validate-first prop

This commit is contained in:
陈嘉涵
2020-02-12 11:19:58 +08:00
parent 080d1828c8
commit 48d2f64aba
2 changed files with 56 additions and 13 deletions
+38 -2
View File
@@ -3,6 +3,10 @@ import { createNamespace } from '../utils';
const [createComponent, bem] = createNamespace('form');
export default createComponent({
props: {
validateFirst: Boolean,
},
provide() {
return {
vanForm: this,
@@ -16,8 +20,35 @@ export default createComponent({
},
methods: {
// @exposed-api
validate() {
validateSeq() {
return new Promise((resolve, reject) => {
const errors = [];
this.fields
.reduce(
(promise, field) =>
promise.then(() => {
if (!errors.length) {
return field.validate().then(error => {
if (error) {
errors.push(error);
}
});
}
}),
Promise.resolve()
)
.then(() => {
if (errors.length) {
reject(errors);
} else {
resolve();
}
});
});
},
validateAll() {
return new Promise((resolve, reject) => {
Promise.all(this.fields.map(item => item.validate())).then(errors => {
errors = errors.filter(item => item);
@@ -31,6 +62,11 @@ export default createComponent({
});
},
// @exposed-api
validate() {
return this.validateFirst ? this.validateSeq() : this.validateAll();
},
getValues() {
return this.fields.reduce((form, field) => {
form[field.name] = field.formValue;