angular自定义验证器实现所遇到的问题
回过头来看一下表单校验的校验器。校验器共有两种,同步校验和异步校验,验证器函数接受一个control,然后返回一组错误对象(验证不通过)或 null(验证通过),当未返回任何内容时表示未开始校验。
验证错误是一个对象,对象结构唯一的要求是key必须为字符串,值可以为any类型,例如你可以返回一个{duplicate: true},表示当前control的duplicate校验未通过。
值得注意的是,出于性能考虑,异步校验器会在所有同步校验器完成之后才会触发,在此之前异步校验器会处于正确状态。
返回值类型必须是一个promise 或者是一个Observable类型的数据
验证器返回的内容切记:验证结果为正确时,返回null 不可返回空
异步验证开始时,表单将进入Pending状态,当验证结果返回之后才会变成valid或invalid。在判断表单状态的时候需要注意一下异步问题。当判断为pending时进入一个定时器循环判断直到不为pending为止。