Forms 如何仅在单击“提交”时验证所有表单?

Forms 如何仅在单击“提交”时验证所有表单?,forms,validation,angular,angular2-forms,Forms,Validation,Angular,Angular2 Forms,我的问题是,角度2/4始终与模糊和焦点立即验证 但即使是谷歌自己也总是在第一次提交后进行验证 您知道如何将表单更改为仅在第一次提交后使用简单解决方案启动fire验证,以便我可以使用所有表单。我可以创建一个指令,但我还没有找到解决方案,你有什么想法吗?你可以在onSubmit()函数上完成。在这里,您可以验证FormControls并手动设置错误,如下面的示例validateEmail()函数 validateEmail() { let invalid: boolean; if (

我的问题是,角度2/4始终与模糊和焦点立即验证

但即使是谷歌自己也总是在第一次提交后进行验证


您知道如何将表单更改为仅在第一次提交后使用简单解决方案启动fire验证,以便我可以使用所有表单。我可以创建一个指令,但我还没有找到解决方案,你有什么想法吗?

你可以在onSubmit()函数上完成。在这里,您可以验证FormControls并手动设置错误,如下面的示例validateEmail()函数

validateEmail() {
    let invalid: boolean;
    if (this.registerForm.get("email").valid) {
      this.registerService.checkEmail(this.registerForm.get("email").value).subscribe( res => {
        invalid = res ? true : false;

        if (invalid) {
        console.log("Email is invalid: User already exists", res);
        this.registerForm.controls["email"].setErrors({invalidEmail: true});
      }
      },
      error => console.log("Error at this.registerService.checkEmail()", error))
    }
  }
在HTML中,您可以像这样检查手动创建的错误是否为真,并可以向UI添加一些错误消息:

<span *ngIf="registerForm.controls['email'].hasError('invalidEmail')" class="help-block has-error">E-Mail already exists</span>
电子邮件已存在

如果您使用动态表单API并在提交时添加控件,这应该是可能的。您是否使用反应式表单?我想,我会这样做,并创建一个指令,在提交之后或之前添加所有控件和验证。嗯,我可以这样做,但例如angualr material已经这样做了,突出显示输入即使我隐藏验证,您知道覆盖验证触发器吗???仅在提交后启动fire验证?我知道您不能覆盖触发器。只有一个用于注册同步/异步验证的API。