【问题标题】:When and where to call updateValueAndValidity?何时何地调用 updateValueAndValidity?
【发布时间】:2021-04-02 07:38:05
【问题描述】:

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

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

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

Q2:我是不是要通过表单更新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);

【问题讨论】:

标签: angular validation angular2-form-validation


【解决方案1】:

您需要在所有控件上调用更新以确保安全

在这个答案https://stackoverflow.com/a/54045398/13680115你可以看到这个函数(updateValueAndValidity)更新父的行

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

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

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

注意这一行它不会沿着树向下,只会向上,因此如果您在form 上调用该函数,controls 可能没有所需的行为,但会更新控件将反映在表格上

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

【讨论】:

  • 问题:如果我将它应用于其中一个表单控件并且它上升了,它根本不会影响其他控件,只会影响父表单上的直接内容?
猜你喜欢
  • 2017-07-01
  • 1970-01-01
  • 1970-01-01
  • 2018-07-06
  • 2023-01-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-01-08
相关资源
最近更新 更多