问题描述
我不清楚应该在何时何地调用 updateValueAndValidity。
假设我有一个包含许多 formControl 的 formGroup。 现在,根据一些单选选项的选择,会触发一个事件来修改多个 formControl 的“验证器”。
问题 1:我是在修改后立即调用 updateValueAndValidity 还是在所有修改调用完成后调用?
Q2:我是不是要通过form更新formGroup/formControls来更新所有formControls
this.form.updateValueAndValidity('emitEvent': false);
或单独调用每个 formControls
this.form.get('control1').updateValueAndValidity('emitEvent': false);
this.form.get('control3').updateValueAndValidity('emitEvent': false);
this.form.get('control8').updateValueAndValidity('emitEvent': false);
解决方法
您需要调用所有控件的更新以确保安全
在此答案 https://stackoverflow.com/a/54045398/13680115 中,您可以看到此函数 (updateValueAndValidity
) 更新父项的行
目前它似乎正在执行以下操作(此列表基于方法名称):
- '设置初始状态' - 这使得 .status 'VALID' 除非所有控件都被禁用,在这种情况下它使它成为 'DISABLED'
- '更新值' - 如果控件启用,这似乎设置 .value,如果禁用,则清除它。
- 'Runs validator' - 这会更新整个错误对象。因此,如果您设置了任何自定义错误,则会清除自定义错误。
- “取消订阅” - 停止当时正在运行的任何异步验证器
- 'Emit' 事件 -(如果选项中的 emitEvent != false)。这只是值和状态范式事件。
- 使用相同的规则更新父级 - 除非设置了 onlySelf。
注意:它不会从树上下来,只会向上。
注意行它不会沿着树向下,只会向上所以如果您在 form
上调用该函数,controls
可能没有所需的行为但是更新控件会反映在表单上
虽然很麻烦,但您需要更新每个控件的值和有效性