【问题标题】:Angular 2+ forms pass validation when invalid values are freshly loaded新加载无效值时,Angular 2+ 表单通过验证
【发布时间】:2018-09-06 12:19:24
【问题描述】:

我有一系列表格,每五分钟自动保存一次。表单可以并且应该在此过程中保存 invalid 值(考虑 maxLength 问题以在后端保存问题)。

此外,用户可以随时提交表单,但要这样做,表单必须有效。

到目前为止,我已经做好了这一切。

问题是,当表单在自动保存后被重新访问时,没有发生有效的用户提交,Angular 加载了 invalid 值,因为它应该加载,但随后表明表单是有效的,即使某些加载的值不应该通过它们的验证器。

我目前正在构建一些非常高级的表单,但是 非常 Angular 表单验证的新手。很抱歉这个菜鸟问题,但是在这种情况下我应该如何告诉 Angular 对无效的、新加载的字段运行验证?

我已经开始破解脏/原始、触摸/未触摸、待处理等,并处理它,但不确定这些是否是我需要的,或者如何实现将整个表单标记为的东西我需要没有副作用的东西。

【问题讨论】:

    标签: angular angular-reactive-forms angular-forms


    【解决方案1】:

    你在处理肮脏/原始/感动的东西时走上了正轨。但是,FormGroup 提供了一种检查方法:

    afterFormGetsPopulated() {
      this.formGroup.updateValueAndValidity();
    }
    

    我认为这应该可行,但我现在无法对其进行现场测试。如果没有,每个FormControl 都有相同的方法:

    afterFormGetsPopulated() {
      this.formGroup.controls.forEach(c => c.updateValueAndValidity());
    }
    

    【讨论】:

    • 这有效,但只有在填充字段后异步运行(通过 setTimeout)。它需要在每个控件上运行。幸运的是,我有一个通过传入函数遍历嵌套表单的函数。
    • 听起来不错。另请注意,默认情况下,该方法还将更新运行它的控件的所有祖先。可以帮助清理一下。
    猜你喜欢
    • 2020-12-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-11-28
    • 2016-08-19
    • 2019-03-12
    相关资源
    最近更新 更多