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