</style>
解释一:用
fileds 缓存需要校验的表单项,因为我们在
FormItem 中派发了事件。只有需要校验的
FormItem 会被派发到这里,而且都会保存在数组中。
if (this.prop) {
this.dispatch('EForm', 'addFiled', this);
}解释二:当点击提交按钮时,会触发这个事件。
解释三:遍历所有被添加到
fileds 中的
FormItem 项,让每一项单独去验证,会返回 Promise 的
true 或
false 。将所有的结果,放在一个数组
eachFiledResultArray 中。解释四:获取所有的结果,统一进行处理,其中有一个结果为
false ,验证就不能通过。至此,一个最简化版本的仿 ElementUI 的表单就实现了。
四. 总结
当然上面的代码还有很多可以优化的地方,比如说
dispatch 函数,我们可以写一遍,使用的时候用
mixin 导入。由于篇幅关系,这里就不做处理了。通过这次实现,我们首先总结一下其中所涉及的知识点。
父组件传递给子组件用 props
子组件派发事件,用 $emit
跨层级数据交互,用 provide 和 inject
用 slot 可以预留插槽
其次是一些思想:
单项数据流:父组件传递给子组件的值,子组件内部只能用,不能修改。
组件内部的 name 属性,可以通过 this.$parent.$options.name 查找。
想要批量处理很多异步的结果,可以用 promise 对象。
最后,文章会首先发布在我的 Github ,以及公众号上,欢迎关注,欢迎 star。
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持软件开发网。










