如何在按钮提交上验证表单

时间:2017-02-06 08:25:08

标签: validation angular reactive-forms

我有一个表单,一旦控件从 ng-untouched ng-pristine ng-invalid 更改为 ng-pristine ng-invalid ng-touching < / strong>但如果我有一个包含更多控件的表单,那么我希望用户知道他/她在按钮提交时错过了哪个字段。我怎么能用angularJS2做到这一点。我使用了ReactiveFormsModule来验证控件

以下是我的代码:组件

sys.exit()

以下是我的代码:模块

import { Component } from '@angular/core';
import { FormBuilder, Validators, FormGroup, FormControl } from '@angular/forms';

@Component({
    selector: 'page',
    templateUrl:'../app/template.html'
})
export class AppComponent {
    registrationForm: FormGroup;
    constructor(private fb: FormBuilder) {
        this.registrationForm = fb.group({
            username: ['', [Validators.required, Validators.minLength(4)]],
            emailId: ['', [Validators.required, this.emailValidator]],
            phonenumber: ['', [Validators.required, this.phoneValidation]]           
        })
    }

    emailValidator(control: FormControl): { [key: string]: any } {
        var emailRegexp = /^[a-z0-9!#$%&'*+\/=?^_`{|}~.-]+@[a-z0-9]([a-z0-9-]*[a-z0-9])?(\.[a-z0-9]([a-z0-9-]*[a-z0-9])?)*$/i;
        if (control.value && !emailRegexp.test(control.value)) {
            return { invalidEmail: true };
        }
    }
    phoneValidation(control: FormControl) {
        if (control['touched'] && control['_value'] != '') {
            if (!/^[1-9][0-9]{10}$/.test(control['_value'])) {
                return { 'invalidPhone': true }
            }
        }
    }
}

以下是我的代码:模板

import { NgModule } from '@angular/core';
import { BrowserModule } from '@angular/platform-browser';
import { ReactiveFormsModule } from '@angular/forms';

import { AppComponent } from '../app/component';
@NgModule({
    imports: [BrowserModule, ReactiveFormsModule],
    declarations: [AppComponent],
    bootstrap: [AppComponent]
})
export class AppModule { }

我想将所有无效控件类更新为 ng-untouched ng-pristine ng-invalid ,但不确定这是否是正确的方法

1 个答案:

答案 0 :(得分:2)

Angular表单没有提供指定何时进行验证的方法。

只需在提交表单时将标记设置为true,并仅在使用true或类似标记*ngIf="flag"时显示验证警告。

<form [formGroup]="registrationForm" (ngSubmit)="submitRegistration(registrationForm.value)">

<div *ngIf="showValidation> validation errors here </div>

showValidation:boolean = false;

submitRegistration() {
  if(this.registrationForm.status == 'VALID') {
    this.processForm();
  } else {
    this.showValidation = true;
  }
}