【问题标题】:How to trigger form validations (only) when submitting the form?提交表单时如何(仅)触发表单验证?
【发布时间】:2020-11-05 13:39:53
【问题描述】:

我创建了一个动态表单,您可以在其中使用专用按钮添加或删除字段:

问题是当我们添加一个新字段时,表单验证会立即触发,导致显示错误消息:

我只想在用户在出现错误时尝试提交表单时触发它。当然如果有错误也不能提交表单(Validators.required,nicknameValidator())

这是在表单中生成新行的代码:

createNicknameFormGroup(): any {
  return new FormGroup({
    nickname: new FormControl('', Validators.required, this.isValidNicknameService.nicknameValidator())
  }, { updateOn: 'blur' })
}

以及负责显示这些行的 html 代码:

<div *ngFor="let nickname of nicknamesFormArray.controls; let i = index;" class="row">

  <div [formGroupName]="i">

    <mat-form-field appearance="outline" class="nickname-form-field">
      <mat-label>{{formFieldsInfo.nicknames.label}}</mat-label>
      <input matInput [placeholder]=formFieldsInfo.nicknames.placeholder formControlName="nickname"
             type="text"
             class="form-control">
      <mat-hint>{{formFieldsInfo.nicknames.hint}}</mat-hint>
      <mat-error *ngIf="nicknamesFormArray.controls[i].get('nickname').errors?.required">
        {{formFieldsInfo.nicknames.errorMessages.required}}
      </mat-error>
      <mat-error *ngIf="nicknamesFormArray.controls[i].get('nickname').errors?.shouldNotStartWithA">
        {{formFieldsInfo.nicknames.errorMessages.shouldNotStartWithA}}
      </mat-error>
    </mat-form-field>

    <mat-icon (click)="removeNicknameFromNicknamesFormArray(i)" class="clear">
      clear
    </mat-icon>

  </div>

</div>

【问题讨论】:

    标签: angular angular-forms angular2-form-validation


    【解决方案1】:
    1. 未设置验证器。放空就好了。
    2. 提交时(只是按钮),您可以根据需要通过setValidators()setErrors() 添加验证器运行时。
    3. 出现/存在错误后,您必须将带有空数组的验证器清理到setValidators()

    https://angular.io/api/forms/AbstractControl#setValidators https://angular.io/api/forms/AbstractControl#setErrors

    我建议阅读更多 API 选项。

    【讨论】:

    • 很好,谢谢。在这种情况下有没有办法让按钮保持禁用状态?
    • 只是编程:
    猜你喜欢
    • 2013-05-20
    • 2019-11-06
    • 1970-01-01
    • 2018-01-09
    • 2017-03-06
    • 2016-12-16
    • 1970-01-01
    • 2020-02-12
    • 2016-11-23
    相关资源
    最近更新 更多