FormItem 挂载完成后,需要派发一个事件告诉
Form :你可以校验我了。解释三:当
FormItem 中有
prop 属性的时候才校验,没有的时候不校验。比如提交按钮就不需要校验。
<e-form-item>
<input type="submit" @click="submitForm()" value="提交">
</e-form-item>**解释四:**返回一个 promise 对象,批量处理所有异步校验的结果。
解释五:
descriptor 对象是
async-validator 的用法,采用键值对的形式,用来检查当前项。比如:
// 检查当前项
// async-validator 给出的例子
name: {
type: "string",
required: true,
validator: (rule, value) => value === 'muji',
}
FormItem 中检查当前项完成了,现在我们需要处理一下
Form 组件中的全局校验。表单提交时,需要对
form 进行一个全局校验。大致的思路是:循环遍历表单中的所有派发上来的
FormItem ,让每一个
FormItem 执行自己的校验函数,如果有一个为
false ,则校验不通过;否则,校验通过。我们通过代码实现一下:
<template>
<form>
<slot></slot>
</form>
</template><script>
export default {
props: {
model: { type: Object, required: true },
rules: { type: Object }
},
provide() {
return {
eForm: this, // provide this component's instance
}
},
data() {
return {
fileds: [],
}
},
created() {
// 解释一
this.fileds = [];
this.$on('addFiled', filed => this.fileds.push(filed));
},
methods: {
async validate(cb) { // 解释二
// 解释三
const eachFiledResultArray = this.fileds.map(filed => filed.validate());
// 解释四
const results = await Promise.all(eachFiledResultArray);
let ret = true;
results.forEach(valid => {
if (!valid) {
ret = false;
}
});
cb(ret);
}
},
}
</script>
<style lang="scss" scoped>










