设计思路 分为3层
Vue自主设计表单验证
总共存在4个页面
FormTest < Form < FormItem < input

  • 1.最外层页面(FormTest)中 写好层级结构及模型和校验规则
    层级结构如下
    Vue自主设计表单验证
    在data中定义模型和校验规则
    Vue自主设计表单验证

  • 2.form页面结构如下
    放入一个插槽 来放接收的表单
    Vue自主设计表单验证
    在props里面规定页面传入的数据必传性和类型
    模型和校验规则都是Object
    同时把 当前表单实例传递给后代
    Vue自主设计表单验证

  • 3.formItem页面结构如下
    放传入的label 然后一个插槽来放表单
    同时一个标签放校验错误信息

    通过是否有label进行筛选渲染 =》父页面的传入
    以及是否校验失败显示校验错误信息 =》校验然后通过当前页面变量进行控制

    Vue自主设计表单验证
    数据结构如下
    拿到父页面的form进行注入
    然后拿到页面的传值
    以及当前页面数据的声明
    Vue自主设计表单验证

  • 4.input页面结构如下 就是简单的input
    但是绑定了value type 和input事件
    Vue自主设计表单验证
    Input值的控制 思路是
    通过父页面传值显示
    用户对于input值的改变 当前页面通知父页面进行值的改变
    当前页面不能修改prop传过来的参数值
    代码如下
    Vue自主设计表单验证
    Input事件是集 onChange 和set值一体的事件
    所以触发后直接进行了值的更新

  • 5.对form进行注册
    表单的层级结构是
    Vue自主设计表单验证
    Input修改值以后 验证应在formItem进行处理
    所以在input页面值进行修改触发 input事件时 应该触发formItem的校验事件
    因为 formItem刚好在input的外层 所以可以用$parent找到
    Input页面如下
    Vue自主设计表单验证
    在formItem页面
    在页面初始化时 对页面的validate事件进行注册
    同时在组件挂载时对表单的每一项进行注册声明 通知到form页面 所有注册的表单信息
    (参考react的form校验 form的每一项需要进行注册 缓存在form中)
    formItem页代码如下
    Vue自主设计表单验证
    form页面对传过来的item进行接收
    同样是在初始化的生命周期里

  • 6.开始表单验证
    思路:
    在formItem页里对每一项进行验证 来控制校验对应项显示的提示 以及校验当前项返回一个结果
    在form页拿到所有校验结果的一个数组,返回一个总的验证结果
    当最外层页面触发登录 进行总验证时,调用form页的验证 在总页面拿到验证结果 进行相应提示和操作
    (validate方法如果没有传入回调,则返回的是一个Promise)
    formItem 页面代码如下:
    通过父页面传入的prop 和注入的form 查到对应的入了以及errorMessage
    通过判断是否通过校验来控制页面提示的显示以及给form返回一个结果
    Vue自主设计表单验证
    form页面代码如下:
    因为每一项返回的是Promise要等待全部的Promise处理完成 拿到结果
    Vue自主设计表单验证
    最外层页面代码如下:
    Vue自主设计表单验证
    Vue自主设计表单验证
    Vue自主设计表单验证
    看资料时觉得有些蒙 写个笔记整理以后 明白很多
    希望能帮到需要的人

相关文章:

  • 2022-12-23
  • 2022-12-23
  • 2022-12-23
  • 2021-04-05
  • 2022-03-10
  • 2021-07-20
  • 2021-11-23
  • 2021-07-11
猜你喜欢
  • 2021-12-25
  • 2021-12-12
  • 2021-09-14
  • 2022-12-23
  • 2022-12-23
  • 2022-12-23
  • 2022-12-23
相关资源
相似解决方案