Angular form.statusChanges不适用于动态表单+ asyncValidation

问题描述 投票:1回答:1

当将具有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。

angular
1个回答
0
投票

似乎是设计完成的。它不会触发状态更改,因为它在初始化时(或在updateValueAndValidity的第一次运行时)是无效的,并且如果您检查FormControl的代码,则将防止发出该事件。您可以在这里检查:https://github.com/angular/angular/blob/8.2.13/packages/forms/src/model.ts#L1275

如您所见,emitEvent为假。

这并不能真正解决您的问题,但至少可以说明为什么会这样。在您的示例中,如果在按下控件后立即将值设置为空值,则将获得该statusChange,因为该时间updateValueAndValidityemitEvent设置为true。因此,如果您确实希望在初始化时触发statusChanges,则formControl的workAround将setValue设置为空。

© www.soinside.com 2019 - 2024. All rights reserved.