何时何地调用 updateValueAndValidity?

Eli*_*jah 4 validation angular angular2-form-validation

我不清楚我应该在何时何地调用updateValueAndValidity

假设我有一个包含许多 formControl 的 formGroup。现在,基于某些单选选项选择,会触发一个事件来修改多个 formControl 的“验证器”。

Q1:我是在修改后立即调用 updateValueAndValidity 还是在所有修改调用完成后调用 updateValueAndValidity?

Q2:我是否可以通过表单更新formGroup / formControls来更新所有formControls

this.form.updateValueAndValidity('emitEvent': false);
Run Code Online (Sandbox Code Playgroud)

或单独调用每个 formControls

this.form.get('control1').updateValueAndValidity('emitEvent': false);
this.form.get('control3').updateValueAndValidity('emitEvent': false);
this.form.get('control8').updateValueAndValidity('emitEvent': false);
Run Code Online (Sandbox Code Playgroud)

Owe*_*vin 5

为了安全起见,您需要调用所有控件的更新

在此答案中/sf/answers/3783177891/您可以看到该函数 ( updateValueAndValidity) 更新父级的行

目前它似乎正在执行以下操作(此列表基于方法名称):

  1. “设置初始状态” - 这使得 .status 为“有效”,除非所有控件都被禁用,在这种情况下它会使其“禁用”
  2. “更新值” - 如果启用该控件,这似乎会设置 .value,如果禁用,则会清除它。
  3. “运行验证器” - 这会更新整个错误对象。因此,如果您设置了任何自定义错误,则会清除这些错误。
  4. “取消订阅”- 停止当时运行的任何异步验证器
  5. 'Emit' 事件 - (如果选项中的 emmitEvent != false)。这只是值和状态的正常形式事件。
  6. 使用相同的规则更新父级 - 除非设置了 onlySelf。

注意:它不会从树上下来,只会向上。

请注意行It does not go down the tree, only up so if you call the function on the formcontrols可能没有所需的行为,但更新控件将反映在表单上

尽管可能很麻烦,但您需要更新每个控件的值和有效性