angular - 何时何地调用 updateValueAndValidity?
问题描述
我不清楚我应该在何时何地调用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);
解决方案
您需要调用所有控件的更新以确保安全
在这个答案中https://stackoverflow.com/a/54045398/13680115你可以看到这个函数(updateValueAndValidity
)更新父的行
目前它似乎正在执行以下操作(此列表基于方法名称):
- '设置初始状态' - 使 .status 为'有效',除非所有控件都被禁用,在这种情况下,它使其成为'禁用'
- '更新值' - 如果控件启用,这似乎设置 .value,如果禁用,则清除它。
- “运行验证器” - 这会更新整个错误对象。因此,如果您设置任何自定义错误,将被清除。
- “取消订阅” - 停止当时运行的任何异步验证器
- 'Emit' 事件 - (如果选项中的 emitEvent != false)。这只是价值和状态的正常形式事件。
- 使用相同的规则更新父级 - 除非设置了 onlySelf。
注意:它不会从树上下来,只会向上。
注意它不会沿着树向下走,只会向上走,所以如果你在 上调用函数form
,controls
可能没有所需的行为,但更新控件将反映在表单上
因此,尽管它可能很麻烦,但您需要更新每个控件的值和有效性
推荐阅读
- python - 如何使用 pythonnet 获取可用模块
- assembly - 我正在尝试使用汇编中的星号制成的圣诞树创建引导加载程序,但我不知道如何使用相同的循环进行打印
- python - 我正在尝试使用 Python 创建一个验证方法
- python - python如何将带有变体选择器的unicode转换为字符串并正确呈现
- python-3.x - 弹性豆茎中的健康下降 - 无法找出原因
- c# - 是什么让 BackgroundService.ExecuteAsync 方法无法完成?
- python - 如何在熊猫中使用正则表达式在包含混合数据的df列中查找数字
- javascript - 尝试将随机索引值分配给变量(学习编码!)
- scala - 解决线程“main”中的异常 java.lang.ArrayIndexOutOfBoundsException: 6
- sqlite - SQLite如何从分隔列文本中对另一个表中的值求和?