Angular 12调用addValidator后原有异步验证器不触发的原因是什么
Angular添加验证器后异步验证器失效的常见原因
核心原因1:Angular默认验证短路逻辑
Angular表单验证的默认执行逻辑为:优先执行全部同步验证器,只要任意同步验证器返回非空错误结果,就会直接终止验证流程,不会触发后续的异步验证器。
你当前的代码中同步验证器authorityValidator直接返回了固定错误{wrongAuthority: 12333},同步验证始终不通过,异步验证器自然不会被触发,这个表现和addValidators方法本身无关,属于Angular的内置优化逻辑,用于避免不必要的异步请求开销。
验证方法:你可以将同步验证器的返回值临时改为
null,如果此时异步验证器恢复触发,即可确认是该原因导致。
原因2:Angular 12早期版本已知Bug
Angular 12.0.x 到 12.1.x 的早期小版本存在addValidators方法意外清空异步验证器配置的已知问题,属于框架本身的缺陷。
解决方案:将项目的Angular依赖升级到12.2.x及以上的稳定版即可修复。
原因3:误调用覆盖类验证器方法
如果实际代码中错误调用了setValidators/setAsyncValidators而非追加类的addValidators/addAsyncValidators,就会覆盖已有的验证器配置,该方法设计上就是全量替换现有验证器列表。
内容的提问来源于stack exchange,提问作者robert
相关产品推荐
相关产品推荐

