当在表单组上使用带有异步验证器的反应式表单时,并且如果通过patchValue在构造函数中使用或更改表单组的值ngOnInit- 即使异步验证器 observable 完成,表单仍保持PENDING状态。
在示例中,您会看到一个包含两个字段的简单表单,其中包含表单状态和验证器状态的指示。在代码中,ngOnInit我调用patchValue表单,导致表单进入PENDING状态,并调用异步验证器。
异步验证器没有做太多,它只是等待 1 秒然后返回一个null错误对象,基本上说表单是有效的。您可以在指示中看到验证已完成,但表单仍处于PENDING状态。
如果您在构造函数或ngOnInit(即对象构造)之外的任何时间触发字段值的更改 - 那么当验证器完成时表单会进入VALID状态。如果您将值更改包装在setTimeout.
难道我做错了什么?这是正常行为,还是 Angular 中的错误?