【问题标题】:Angular validation not sync with HTML validation角度验证与 HTML 验证不同步
【发布时间】:2019-06-13 16:12:41
【问题描述】:

我遇到了 Angular 验证问题。

我在 parentForm 中有一个嵌套的 modelGroup。在 parentForm 中有一个用于嵌套 modelGroup 的最大值作为 zip 字段最大值的指令输入。

Stackblitz 中的示例:https://stackblitz.com/edit/91k00-nested-from-validity

预期结果: 一旦更改了最大值,max 指令会评估 zip 字段并使该字段无效,那么 modelGroup 和 parentForm 也无效。

实际结果: 更改最大值后,max 指令会评估 zip 字段并使该字段无效但 modelGroup 和 parentForm 仍然有效

您能解释一下这种行为并帮助我解决它吗? 谢谢

【问题讨论】:

  • 在这种情况下,也许您可​​以手动将 myForm.valid 属性设置为 false
  • 我会建议使用反应形式 :)

标签: angular validation


【解决方案1】:

你不会让 Angular 休息一下。您更改 maxValue,并立即进行更新。使用 SetTimeout 制作新的 cicle

  updateValidity() {
    setTimeout(()=>{
      this.parentForm.controls.address.controls["zip"].updateValueAndValidity();
    })
  }

另外,更改值时需要调用函数updateValidity;

setTo899 () {
    this.maxZipValue = 899;
    this.updateValidity()
  }

<input type="number" name="maxZipValue" 
     [ngModel]="maxZipValue" 
     (ngModelChange)="maxZipValue=$event;updateValidity()">

your forked stackblitz

注意:我不确定,但使用 ReactiveForms 效果最好,并且可以删除此解决方法

【讨论】:

  • 感谢您的帮助,我应该开始考虑迁移到 Reacive Forms...
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-08-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-07-04
相关资源
最近更新 更多