当将具有asyncValidation的新FormControl动态添加到反应形式时,表单从PENDING变为VALID / INVALID,但不会触发statusChanges。
我有一个可以动态修改的表单,此后,我订阅了statusChanges。我正在打印表单的状态,可以检查状态是否已更改,但不会触发stausChanges。
这里是一个示例https://stackblitz.com/edit/angular-pvebmb?file=src%2Fapp%2Fapp.component.ts。
在此示例中,您可以检查console.log是否已订阅statusChanges。单击该按钮后,将添加带有异步验证的新FormControl,该验证需要1秒才能完成。您可以检查一下,当您单击按钮时,表单的状态(以html形式打印)从PENDING变为INVALID,但是没有打印与statusChanges相关的console.log。
我希望每次表单状态值更改时都会触发statusChanges。
似乎是设计完成的。它不会触发状态更改,因为它在初始化时(或在updateValueAndValidity
的第一次运行时)是无效的,并且如果您检查FormControl的代码,则将防止发出该事件。您可以在这里检查:https://github.com/angular/angular/blob/8.2.13/packages/forms/src/model.ts#L1275
如您所见,emitEvent
为假。
这并不能真正解决您的问题,但至少可以说明为什么会这样。在您的示例中,如果在按下控件后立即将值设置为空值,则将获得该statusChange,因为该时间updateValueAndValidity
将emitEvent
设置为true。因此,如果您确实希望在初始化时触发statusChanges,则formControl的workAround将setValue设置为空。