【发布时间】:2019-11-05 16:01:16
【问题描述】:
当使用 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。
【问题讨论】:
-
更改控件的状态,而不是表单的状态,你可以使用:
this.form.get('simpleValue').statusChanges.subscribe((status) => console.log('STATUS has changed: ' + status),因为你把验证器放在了控件中 -
但是不应该每次表单状态改变时触发statusChanges吗?在示例中,您可以在页面中看到 form.status 已更改。
-
我删除了“simpleValue”表单控件,因为此示例不需要。
标签: angular