angular自定义验证器实现所遇到的问题

1:返回值问题 校验器

2:返回值类型

3:创建自定义指令配置注意

 

 

1:校验器

回过头来看一下表单校验的校验器。校验器共有两种,同步校验和异步校验,验证器函数接受一个control,然后返回一组错误对象(验证不通过)或 null(验证通过),当未返回任何内容时表示未开始校验

异步校验器要求返回Promise或Observable,同时返回的可观察对象必须是有限的,也就是说,它必须在某个时间点结束(complete)。要把无尽的可观察对象转换成有限的,可以使用 first、last、take 或 takeUntil 等过滤型管道对其进行处理。

验证错误是一个对象,对象结构唯一的要求是key必须为字符串,值可以为any类型,例如你可以返回一个{duplicate: true},表示当前control的duplicate校验未通过。

值得注意的是,出于性能考虑,异步校验器会在所有同步校验器完成之后才会触发,在此之前异步校验器会处于正确状态。

异步验证开始时,表单将进入Pending状态,当验证结果返回之后才会变成valid或invalid。在判断表单状态的时候需要注意一下异步问题。当判断为pending时进入一个定时器循环判断直到不为pending为止。

 

 

2:返回值类型

返回值类型必须是一个promise 或者是一个Observable类型的数据

 

3:创建自定义指令配置注意

验证器返回的内容切记:验证结果为正确时,返回null 不可返回空

异步验证开始时,表单将进入Pending状态,当验证结果返回之后才会变成valid或invalid。在判断表单状态的时候需要注意一下异步问题。当判断为pending时进入一个定时器循环判断直到不为pending为止

posted @ 2022-03-23 21:00  攀上顶峰  阅读(205)  评论(0编辑  收藏  举报