我想使用反应式表单方法对我的动态选项卡表单进行验证
I want to make validations into my dynamic tabs form using reactive form approach
我有一个包含六个选项卡的表单。我想在每个选项卡上单独验证。假设我在选项卡 1 上,那么它应该只验证选项卡 1 数据字段。然后如果我切换到选项卡 2,那么选项卡 1 数据字段验证应该消失,它应该只显示选项卡 2 验证。注意 - 我的表单中也有一些公共字段。假设所有标签中都有名字。
HTML File
<div class="add-person-list-page">
<h2 class="text-muted">Add Persons</h2>
<hr>
<form [formGroup]="addPerson" (ngSubmit)="onSubmit()">
<div class="row">
<div class="col-lg-12 col-md-12 col-sm-12 mt-3">
<div class="card">
<div class="card-body switch-field">
<small class="form-text text-muted mb-3">Select role to show minimum mandatory fields.</small>
<input class="form-check-input" type="radio" name="personRoleType"
(change)="onChangeRole(roleType)" [(ngModel)]="roleType" [value]="1"
formControlName="personRoleType">
<label class="form-check-label">Pax</label>
<input class="form-check-input" type="radio" name="personRoleType"
(change)="onChangeRole(roleType)" [(ngModel)]="roleType" [value]="2"
formControlName="personRoleType">
<label class="form-check-label">Pilot</label>
<input class="form-check-input" type="radio" name="personRoleType"
(change)="onChangeRole(roleType)" [(ngModel)]="roleType" [value]="3"
formControlName="personRoleType">
<label class="form-check-label">Crew</label>
<input class="form-check-input" type="radio" name="personRoleType"
(change)="onChangeRole(roleType)" [(ngModel)]="roleType" [value]="4"
formControlName="personRoleType">
<label class="form-check-label">Emerg</label>
<input class="form-check-input" type="radio" name="personRoleType"
(change)="onChangeRole(roleType)" [(ngModel)]="roleType" [value]="5"
formControlName="personRoleType">
<label class="form-check-label">Op/Ow</label>
<input class="form-check-input" type="radio" name="personRoleType"
(change)="onChangeRole(roleType)" [(ngModel)]="roleType" [value]="6"
formControlName="personRoleType">
<label class="form-check-label">Any</label>
</div>
</div>
</div>
<div class="col-lg-12 col-md-12 col-sm-12 mt-3">
<div class="card">
<div class="card-header">
GENERAL
</div>
<div class="card-body">
<div class="form-group">
<label>First Name</label>
<input type="text" class="form-control" placeholder="Enter First Name"
formControlName="firstName"
[ngClass]="{ 'is-invalid': submitted && f.firstName.errors }">
<div *ngIf="submitted && f.firstName.errors" class="invalid-feedback">
<div *ngIf="f.firstName.errors.required">First Name is required</div>
</div>
</div>
<div class="form-group" *ngIf="roleType !== 5">
<label>Middle Name</label>
<input type="text" class="form-control" placeholder="Enter Middle Name"
formControlName="middleName"
[ngClass]="{ 'is-invalid': submitted && f.middleName.errors }">
<div *ngIf="submitted && f.middleName.errors" class="invalid-feedback">
<div *ngIf="f.middleName.errors.required">Middle Name is required</div>
</div>
</div>
<div class="form-group">
<label>Last Name</label>
<input type="text" class="form-control" placeholder="Enter Last Name"
formControlName="lastName" [ngClass]="{ 'is-invalid': submitted && f.lastName.errors }">
<div *ngIf="submitted && f.lastName.errors" class="invalid-feedback">
<div *ngIf="f.lastName.errors.required">Last Name is required</div>
</div>
</div>
<div class="card-body switch-field text-center" *ngIf="roleType !== 4 && roleType !== 5">
<input class="form-check-input" type="radio" formControlName="gender" name="gender"
value="male">
<label class="form-check-label gender"><i class="fa fa-male" aria-hidden="true"></i></label>
<input class="form-check-input" type="radio" formControlName="gender" name="gender"
value="female">
<label class="form-check-label gender"><i class="fa fa-female"
aria-hidden="true"></i></label>
<div *ngIf="submitted && f.gender.errors" class="invalid-feedback">
<div *ngIf="f.gender.errors.required">Gender is required</div>
</div>
</div>
</div>
</div>
</div>
<div class="col-lg-12 col-md-12 col-sm-12 mt-3" *ngIf="roleType !== 4 && roleType !== 5">
<div class="card">
<div class="card-header">
BIRTH DETAILS
</div>
<div class="card-body">
<div class="form-group">
<label>Birth Date</label>
<input type="text" class="form-control" placeholder="Select Birth Date" bsDatepicker
formControlName="birthDate"
[ngClass]="{ 'is-invalid': submitted && f.birthDate.errors }">
<div *ngIf="submitted && f.birthDate.errors" class="invalid-feedback">
<div *ngIf="f.birthDate.errors.required">Birth Date is required</div>
</div>
</div>
<div class="form-group" *ngIf="roleType === 6">
<label>Birth City</label>
<input type="text" class="form-control" placeholder="Enter Birth City"
formControlName="birthCity"
[ngClass]="{ 'is-invalid': submitted && f.birthCity.errors }">
<div *ngIf="submitted && f.birthCity.errors" class="invalid-feedback">
<div *ngIf="f.birthCity.errors.required">Birth City is required</div>
</div>
</div>
<div class="form-group" *ngIf="roleType === 6">
<label>Birth State</label>
<input type="text" class="form-control" placeholder="Enter Birth State"
formControlName="birthState"
[ngClass]="{ 'is-invalid': submitted && f.birthState.errors }">
<div *ngIf="submitted && f.birthState.errors" class="invalid-feedback">
<div *ngIf="f.birthState.errors.required">Birth State is required</div>
</div>
</div>
<div class="form-group" *ngIf="roleType === 6">
<label>Birth Country</label>
<select class="form-control" formControlName="birthCountry"
[ngClass]="{ 'is-invalid': submitted && f.birthCountry.errors }">
<option value="">Select Birth Country</option>
<option *ngFor="let country of countryArray" value="{{country.id}}">{{country.name}}
</option>
</select>
<div *ngIf="submitted && f.birthCountry.errors" class="invalid-feedback">
<div *ngIf="f.birthCountry.errors.required">Birth Country is required</div>
</div>
</div>
<div class="form-group">
<label>Residence</label>
<select class="form-control" formControlName="birthResidence"
[ngClass]="{ 'is-invalid': submitted && f.birthResidence.errors }">
<option value="">Select Residence Country</option>
<option *ngFor="let country of countryArray" value="{{country.id}}">{{country.name}}
</option>
</select>
<div *ngIf="submitted && f.birthResidence.errors" class="invalid-feedback">
<div *ngIf="f.birthResidence.errors.required">Residence Country is required</div>
</div>
</div>
<div class="form-group">
<label>Citizenship</label>
<select class="form-control" formControlName="birthCitizenship"
[ngClass]="{ 'is-invalid': submitted && f.birthCitizenship.errors }">
<option value="">Select Citizenship Country</option>
<option *ngFor="let country of countryArray" value="{{country.id}}">{{country.name}}
</option>
</select>
<div *ngIf="submitted && f.birthCitizenship.errors" class="invalid-feedback">
<div *ngIf="f.birthCitizenship.errors.required">Select Citizenship is required</div>
</div>
</div>
</div>
</div>
</div>
<div class="col-lg-12 col-md-12 col-sm-12 mt-3" *ngIf="roleType !== 1">
<div class="card">
<div class="card-header">
PERMANENT ADDRESS
</div>
<div class="card-body">
<div class="form-group" *ngIf="roleType !== 4">
<label>Street</label>
<input type="text" class="form-control" placeholder="Enter Street Address"
formControlName="paStreet" [ngClass]="{ 'is-invalid': submitted && f.paStreet.errors }">
<div *ngIf="submitted && f.paStreet.errors" class="invalid-feedback">
<div *ngIf="f.paStreet.errors.required">Street Address is required</div>
</div>
</div>
<div class="form-group" *ngIf="roleType !== 4">
<label>City</label>
<input type="text" class="form-control" placeholder="Enter City" formControlName="paCity"
[ngClass]="{ 'is-invalid': submitted && f.paCity.errors }">
<div *ngIf="submitted && f.paCity.errors" class="invalid-feedback">
<div *ngIf="f.paCity.errors.required">City is required</div>
</div>
</div>
<div class="form-group" *ngIf="roleType !== 4 && roleType !== 5">
<label>State</label>
<input type="text" class="form-control" placeholder="Enter State" formControlName="paState"
[ngClass]="{ 'is-invalid': submitted && f.paState.errors }">
<div *ngIf="submitted && f.paState.errors" class="invalid-feedback">
<div *ngIf="f.paState.errors.required">State is required</div>
</div>
</div>
<div class="form-group" *ngIf="roleType !== 4 && roleType !== 5">
<label>Postal Code</label>
<input type="text" class="form-control" placeholder="Enter Postal Code"
formControlName="paPostalCode"
[ngClass]="{ 'is-invalid': submitted && f.paPostalCode.errors }">
<div *ngIf="submitted && f.paPostalCode.errors" class="invalid-feedback">
<div *ngIf="f.paPostalCode.errors.required">Postal Code is required</div>
</div>
</div>
<div class="form-group" *ngIf="roleType !== 4 && roleType !== 5">
<label>Country</label>
<select class="form-control" formControlName="paCountry"
[ngClass]="{ 'is-invalid': submitted && f.paCountry.errors }">
<option value="">Select Country</option>
<option *ngFor="let country of countryArray" value="{{country.id}}">{{country.name}}
</option>
</select>
<div *ngIf="submitted && f.paCountry.errors" class="invalid-feedback">
<div *ngIf="f.paCountry.errors.required">Country is required</div>
</div>
</div>
<div class="form-group" *ngIf="roleType !== 1 && roleType !== 3">
<label>Phone</label>
<input type="text" class="form-control" placeholder="Enter Phone Number"
formControlName="paPhone" [ngClass]="{ 'is-invalid': submitted && f.paPhone.errors }">
<div *ngIf="submitted && f.paPhone.errors" class="invalid-feedback">
<div *ngIf="f.paPhone.errors.required">Phone Number is required</div>
</div>
</div>
<div class="form-group" *ngIf="roleType === 6 && roleType !== 5">
<label>Fax</label>
<input type="text" class="form-control" placeholder="Enter Fax Number"
formControlName="paFax" [ngClass]="{ 'is-invalid': submitted && f.paFax.errors }">
<div *ngIf="submitted && f.paFax.errors" class="invalid-feedback">
<div *ngIf="f.paFax.errors.required">Fax Number is required</div>
</div>
</div>
<div class="form-group" *ngIf="roleType !== 4">
<label>Email</label>
<input type="email" class="form-control" placeholder="Enter Email" formControlName="paEmail"
[ngClass]="{ 'is-invalid': submitted && f.paEmail.errors }">
<div *ngIf="submitted && f.paEmail.errors" class="invalid-feedback">
<div *ngIf="f.paEmail.errors.required">Email is required</div>
</div>
</div>
</div>
</div>
</div>
<div class="col-lg-12 col-md-12 col-sm-12 mt-3" *ngIf="roleType !== 4 && roleType !== 5">
<div class="card">
<div class="card-header">
PRIMARY DOCUMENT
</div>
<div class="card-body">
<div class="form-group">
<label>Document</label>
<select class="form-control" formControlName="primaryDocument"
[ngClass]="{ 'is-invalid': submitted && f.primaryDocument.errors }">
<option value="">Select Document</option>
<option value="1">1</option>
</select>
<div *ngIf="submitted && f.primaryDocument.errors" class="invalid-feedback">
<div *ngIf="f.primaryDocument.errors.required">Document is required</div>
</div>
</div>
<div class="form-group">
<label>Number</label>
<input type="text" class="form-control" placeholder="ID Number"
formControlName="primaryDocumentNumber"
[ngClass]="{ 'is-invalid': submitted && f.primaryDocumentNumber.errors }">
<div *ngIf="submitted && f.primaryDocumentNumber.errors" class="invalid-feedback">
<div *ngIf="f.primaryDocumentNumber.errors.required">ID Number is required</div>
</div>
</div>
<div class="form-group">
<label>Issued by</label>
<select class="form-control" formControlName="primaryDocumentIssuedBy"
[ngClass]="{ 'is-invalid': submitted && f.primaryDocumentIssuedBy.errors }">
<option value="">Select Country</option>
<option *ngFor="let country of countryArray" value="{{country.id}}">{{country.name}}
</option>
</select>
<div *ngIf="submitted && f.primaryDocumentIssuedBy.errors" class="invalid-feedback">
<div *ngIf="f.primaryDocumentIssuedBy.errors.required">Country is required</div>
</div>
</div>
<div class="form-group">
<label>Expiration</label>
<input type="text" class="form-control" placeholder="Select Expiration Date" bsDatepicker
formControlName="primaryDocumentExp"
[ngClass]="{ 'is-invalid': submitted && f.primaryDocumentExp.errors }">
<div *ngIf="submitted && f.primaryDocumentExp.errors" class="invalid-feedback">
<div *ngIf="f.primaryDocumentExp.errors.required">Expiration Date is required</div>
</div>
</div>
</div>
</div>
</div>
<div class="col-lg-12 col-md-12 col-sm-12 mt-3" *ngIf="roleType === 6">
<div class="card">
<div class="card-header">
SECONDARY DOCUMENT
</div>
<div class="card-body">
<div class="form-group">
<label>Document</label>
<select class="form-control" formControlName="secondaryDocument"
[ngClass]="{ 'is-invalid': submitted && f.secondaryDocument.errors }">
<option value="">Select Document</option>
<option value="1">1</option>
</select>
<div *ngIf="submitted && f.secondaryDocument.errors" class="invalid-feedback">
<div *ngIf="f.secondaryDocument.errors.required">Document is required</div>
</div>
</div>
<div class="form-group">
<label>Number</label>
<input type="text" class="form-control" placeholder="ID Number"
formControlName="secondaryDocumentNumber"
[ngClass]="{ 'is-invalid': submitted && f.secondaryDocumentNumber.errors }">
<div *ngIf="submitted && f.secondaryDocumentNumber.errors" class="invalid-feedback">
<div *ngIf="f.secondaryDocumentNumber.errors.required">ID Number is required</div>
</div>
</div>
<div class="form-group">
<label>Issued by</label>
<select class="form-control" formControlName="secondaryDocumentIssuedBy"
[ngClass]="{ 'is-invalid': submitted && f.secondaryDocumentIssuedBy.errors }">
<option value="">Select Country</option>
<option *ngFor="let country of countryArray" value="{{country.id}}">{{country.name}}
</option>
</select>
<div *ngIf="submitted && f.secondaryDocumentIssuedBy.errors" class="invalid-feedback">
<div *ngIf="f.secondaryDocumentIssuedBy.errors.required">Country is required</div>
</div>
</div>
<div class="form-group">
<label>Expiration</label>
<input type="text" class="form-control" placeholder="Select Expiration Date" bsDatepicker
formControlName="secondaryDocumentExp"
[ngClass]="{ 'is-invalid': submitted && f.secondaryDocumentExp.errors }">
<div *ngIf="submitted && f.secondaryDocumentExp.errors" class="invalid-feedback">
<div *ngIf="f.secondaryDocumentExp.errors.required">Expiration Date is required</div>
</div>
</div>
</div>
</div>
</div>
<div class="col-lg-12 col-md-12 col-sm-12 mt-3" *ngIf="roleType === 2">
<div class="card">
<div class="card-header">
PILOT'S LICENSE
</div>
<div class="card-body">
<div class="form-group">
<label>Document</label>
<select class="form-control" formControlName="pilotDocument"
[ngClass]="{ 'is-invalid': submitted && f.pilotDocument.errors }">
<option value="1">Pilot's License</option>
</select>
<div *ngIf="submitted && f.pilotDocument.errors" class="invalid-feedback">
<div *ngIf="f.pilotDocument.errors.required">Document is required</div>
</div>
</div>
<div class="form-group">
<label>Number</label>
<input type="text" class="form-control" placeholder="ID Number"
formControlName="pilotDocumentNumber"
[ngClass]="{ 'is-invalid': submitted && f.pilotDocumentNumber.errors }">
<div *ngIf="submitted && f.pilotDocumentNumber.errors" class="invalid-feedback">
<div *ngIf="f.pilotDocumentNumber.errors.required">ID Number is required</div>
</div>
</div>
<div class="form-group">
<label>Issued by</label>
<select class="form-control" formControlName="pilotDocumentIssuedBy"
[ngClass]="{ 'is-invalid': submitted && f.pilotDocumentIssuedBy.errors }">
<option value="">Select Country</option>
<option *ngFor="let country of countryArray" value="{{country.id}}">{{country.name}}
</option>
</select>
<div *ngIf="submitted && f.pilotDocumentIssuedBy.errors" class="invalid-feedback">
<div *ngIf="f.pilotDocumentIssuedBy.errors.required">Country is required</div>
</div>
</div>
<div class="form-group">
<label>Expiration</label>
<input type="text" class="form-control" placeholder="Select Expiration Date" bsDatepicker
formControlName="pilotDocumentExp"
[ngClass]="{ 'is-invalid': submitted && f.pilotDocumentExp.errors }">
<div *ngIf="submitted && f.pilotDocumentExp.errors" class="invalid-feedback">
<div *ngIf="f.pilotDocumentExp.errors.required">Expiration Date is required</div>
</div>
</div>
</div>
</div>
</div>
</div>
<div class="row mt-4">
<div class="col-md-12">
<button class="btn btn-md btn-primary" type="submit"> Add Person</button>
<button class="btn btn-md btn-primary float-right" type="button"> Cancel</button>
</div>
</div>
</form>
ts file
export class addPersonComponent implements OnInit {
roleType: number = 1;
addPerson: FormGroup;
submitted = false;
countryArray = [];
Ispax: boolean = false;
constructor(private formBuilder: FormBuilder, private router: Router, private flashPassService: FlashpassService, protected loadingService: LoadingService) {
}
ngOnInit() {
this.initForm();
this.getListofCountry();
}
initForm() {
this.addPerson = this.formBuilder.group({
personRoleType: ['1'],
firstName: [''],
lastName: [''],
middleName: [''],
gender: [''],
birthDate: [''],
birthCity: [''],
birthState: [''],
birthCountry: [''],
birthResidence: [''],
birthCitizenship: [''],
paStreet: [''],
paCity: [''],
paState: [''],
paPostalCode: [''],
paCountry: [''],
paPhone: [''],
paFax: [''],
paEmail: [''],
primaryDocument: [''],
primaryDocumentNumber: [''],
primaryDocumentIssuedBy: [''],
primaryDocumentExp: [''],
secondaryDocument: [''],
secondaryDocumentNumber: [''],
secondaryDocumentIssuedBy: [''],
secondaryDocumentExp: [''],
pilotDocument: [''],
pilotDocumentNumber: [''],
pilotDocumentIssuedBy: [''],
pilotDocumentExp: [''],
});
}
// initialize form instance.
get f() { return this.addPerson.controls; }
// Signup form submit function.
onSubmit() {
this.submitted = true;
if (this.addPerson.invalid) {
return;
}
// this.router.navigate(['/companies']);
}
getListofCountry() {
this.loadingService.startLoading();
this.flashPassService.getCountryList().subscribe(data => {
this.countryArray = Object.assign([], data);
this.loadingService.endLoading();
});
}
onChangeRole(type) {
}
您可以在标签更改事件中使用 this.f.<yourFormControlName>.setValidators([yourValidator])
方法。手动为您的表单字段设置验证,或者您也可以设置自定义错误 this.f.<yourFormControlName>.setErrors({yourCustomError});
我有一个包含六个选项卡的表单。我想在每个选项卡上单独验证。假设我在选项卡 1 上,那么它应该只验证选项卡 1 数据字段。然后如果我切换到选项卡 2,那么选项卡 1 数据字段验证应该消失,它应该只显示选项卡 2 验证。注意 - 我的表单中也有一些公共字段。假设所有标签中都有名字。
HTML File
<div class="add-person-list-page">
<h2 class="text-muted">Add Persons</h2>
<hr>
<form [formGroup]="addPerson" (ngSubmit)="onSubmit()">
<div class="row">
<div class="col-lg-12 col-md-12 col-sm-12 mt-3">
<div class="card">
<div class="card-body switch-field">
<small class="form-text text-muted mb-3">Select role to show minimum mandatory fields.</small>
<input class="form-check-input" type="radio" name="personRoleType"
(change)="onChangeRole(roleType)" [(ngModel)]="roleType" [value]="1"
formControlName="personRoleType">
<label class="form-check-label">Pax</label>
<input class="form-check-input" type="radio" name="personRoleType"
(change)="onChangeRole(roleType)" [(ngModel)]="roleType" [value]="2"
formControlName="personRoleType">
<label class="form-check-label">Pilot</label>
<input class="form-check-input" type="radio" name="personRoleType"
(change)="onChangeRole(roleType)" [(ngModel)]="roleType" [value]="3"
formControlName="personRoleType">
<label class="form-check-label">Crew</label>
<input class="form-check-input" type="radio" name="personRoleType"
(change)="onChangeRole(roleType)" [(ngModel)]="roleType" [value]="4"
formControlName="personRoleType">
<label class="form-check-label">Emerg</label>
<input class="form-check-input" type="radio" name="personRoleType"
(change)="onChangeRole(roleType)" [(ngModel)]="roleType" [value]="5"
formControlName="personRoleType">
<label class="form-check-label">Op/Ow</label>
<input class="form-check-input" type="radio" name="personRoleType"
(change)="onChangeRole(roleType)" [(ngModel)]="roleType" [value]="6"
formControlName="personRoleType">
<label class="form-check-label">Any</label>
</div>
</div>
</div>
<div class="col-lg-12 col-md-12 col-sm-12 mt-3">
<div class="card">
<div class="card-header">
GENERAL
</div>
<div class="card-body">
<div class="form-group">
<label>First Name</label>
<input type="text" class="form-control" placeholder="Enter First Name"
formControlName="firstName"
[ngClass]="{ 'is-invalid': submitted && f.firstName.errors }">
<div *ngIf="submitted && f.firstName.errors" class="invalid-feedback">
<div *ngIf="f.firstName.errors.required">First Name is required</div>
</div>
</div>
<div class="form-group" *ngIf="roleType !== 5">
<label>Middle Name</label>
<input type="text" class="form-control" placeholder="Enter Middle Name"
formControlName="middleName"
[ngClass]="{ 'is-invalid': submitted && f.middleName.errors }">
<div *ngIf="submitted && f.middleName.errors" class="invalid-feedback">
<div *ngIf="f.middleName.errors.required">Middle Name is required</div>
</div>
</div>
<div class="form-group">
<label>Last Name</label>
<input type="text" class="form-control" placeholder="Enter Last Name"
formControlName="lastName" [ngClass]="{ 'is-invalid': submitted && f.lastName.errors }">
<div *ngIf="submitted && f.lastName.errors" class="invalid-feedback">
<div *ngIf="f.lastName.errors.required">Last Name is required</div>
</div>
</div>
<div class="card-body switch-field text-center" *ngIf="roleType !== 4 && roleType !== 5">
<input class="form-check-input" type="radio" formControlName="gender" name="gender"
value="male">
<label class="form-check-label gender"><i class="fa fa-male" aria-hidden="true"></i></label>
<input class="form-check-input" type="radio" formControlName="gender" name="gender"
value="female">
<label class="form-check-label gender"><i class="fa fa-female"
aria-hidden="true"></i></label>
<div *ngIf="submitted && f.gender.errors" class="invalid-feedback">
<div *ngIf="f.gender.errors.required">Gender is required</div>
</div>
</div>
</div>
</div>
</div>
<div class="col-lg-12 col-md-12 col-sm-12 mt-3" *ngIf="roleType !== 4 && roleType !== 5">
<div class="card">
<div class="card-header">
BIRTH DETAILS
</div>
<div class="card-body">
<div class="form-group">
<label>Birth Date</label>
<input type="text" class="form-control" placeholder="Select Birth Date" bsDatepicker
formControlName="birthDate"
[ngClass]="{ 'is-invalid': submitted && f.birthDate.errors }">
<div *ngIf="submitted && f.birthDate.errors" class="invalid-feedback">
<div *ngIf="f.birthDate.errors.required">Birth Date is required</div>
</div>
</div>
<div class="form-group" *ngIf="roleType === 6">
<label>Birth City</label>
<input type="text" class="form-control" placeholder="Enter Birth City"
formControlName="birthCity"
[ngClass]="{ 'is-invalid': submitted && f.birthCity.errors }">
<div *ngIf="submitted && f.birthCity.errors" class="invalid-feedback">
<div *ngIf="f.birthCity.errors.required">Birth City is required</div>
</div>
</div>
<div class="form-group" *ngIf="roleType === 6">
<label>Birth State</label>
<input type="text" class="form-control" placeholder="Enter Birth State"
formControlName="birthState"
[ngClass]="{ 'is-invalid': submitted && f.birthState.errors }">
<div *ngIf="submitted && f.birthState.errors" class="invalid-feedback">
<div *ngIf="f.birthState.errors.required">Birth State is required</div>
</div>
</div>
<div class="form-group" *ngIf="roleType === 6">
<label>Birth Country</label>
<select class="form-control" formControlName="birthCountry"
[ngClass]="{ 'is-invalid': submitted && f.birthCountry.errors }">
<option value="">Select Birth Country</option>
<option *ngFor="let country of countryArray" value="{{country.id}}">{{country.name}}
</option>
</select>
<div *ngIf="submitted && f.birthCountry.errors" class="invalid-feedback">
<div *ngIf="f.birthCountry.errors.required">Birth Country is required</div>
</div>
</div>
<div class="form-group">
<label>Residence</label>
<select class="form-control" formControlName="birthResidence"
[ngClass]="{ 'is-invalid': submitted && f.birthResidence.errors }">
<option value="">Select Residence Country</option>
<option *ngFor="let country of countryArray" value="{{country.id}}">{{country.name}}
</option>
</select>
<div *ngIf="submitted && f.birthResidence.errors" class="invalid-feedback">
<div *ngIf="f.birthResidence.errors.required">Residence Country is required</div>
</div>
</div>
<div class="form-group">
<label>Citizenship</label>
<select class="form-control" formControlName="birthCitizenship"
[ngClass]="{ 'is-invalid': submitted && f.birthCitizenship.errors }">
<option value="">Select Citizenship Country</option>
<option *ngFor="let country of countryArray" value="{{country.id}}">{{country.name}}
</option>
</select>
<div *ngIf="submitted && f.birthCitizenship.errors" class="invalid-feedback">
<div *ngIf="f.birthCitizenship.errors.required">Select Citizenship is required</div>
</div>
</div>
</div>
</div>
</div>
<div class="col-lg-12 col-md-12 col-sm-12 mt-3" *ngIf="roleType !== 1">
<div class="card">
<div class="card-header">
PERMANENT ADDRESS
</div>
<div class="card-body">
<div class="form-group" *ngIf="roleType !== 4">
<label>Street</label>
<input type="text" class="form-control" placeholder="Enter Street Address"
formControlName="paStreet" [ngClass]="{ 'is-invalid': submitted && f.paStreet.errors }">
<div *ngIf="submitted && f.paStreet.errors" class="invalid-feedback">
<div *ngIf="f.paStreet.errors.required">Street Address is required</div>
</div>
</div>
<div class="form-group" *ngIf="roleType !== 4">
<label>City</label>
<input type="text" class="form-control" placeholder="Enter City" formControlName="paCity"
[ngClass]="{ 'is-invalid': submitted && f.paCity.errors }">
<div *ngIf="submitted && f.paCity.errors" class="invalid-feedback">
<div *ngIf="f.paCity.errors.required">City is required</div>
</div>
</div>
<div class="form-group" *ngIf="roleType !== 4 && roleType !== 5">
<label>State</label>
<input type="text" class="form-control" placeholder="Enter State" formControlName="paState"
[ngClass]="{ 'is-invalid': submitted && f.paState.errors }">
<div *ngIf="submitted && f.paState.errors" class="invalid-feedback">
<div *ngIf="f.paState.errors.required">State is required</div>
</div>
</div>
<div class="form-group" *ngIf="roleType !== 4 && roleType !== 5">
<label>Postal Code</label>
<input type="text" class="form-control" placeholder="Enter Postal Code"
formControlName="paPostalCode"
[ngClass]="{ 'is-invalid': submitted && f.paPostalCode.errors }">
<div *ngIf="submitted && f.paPostalCode.errors" class="invalid-feedback">
<div *ngIf="f.paPostalCode.errors.required">Postal Code is required</div>
</div>
</div>
<div class="form-group" *ngIf="roleType !== 4 && roleType !== 5">
<label>Country</label>
<select class="form-control" formControlName="paCountry"
[ngClass]="{ 'is-invalid': submitted && f.paCountry.errors }">
<option value="">Select Country</option>
<option *ngFor="let country of countryArray" value="{{country.id}}">{{country.name}}
</option>
</select>
<div *ngIf="submitted && f.paCountry.errors" class="invalid-feedback">
<div *ngIf="f.paCountry.errors.required">Country is required</div>
</div>
</div>
<div class="form-group" *ngIf="roleType !== 1 && roleType !== 3">
<label>Phone</label>
<input type="text" class="form-control" placeholder="Enter Phone Number"
formControlName="paPhone" [ngClass]="{ 'is-invalid': submitted && f.paPhone.errors }">
<div *ngIf="submitted && f.paPhone.errors" class="invalid-feedback">
<div *ngIf="f.paPhone.errors.required">Phone Number is required</div>
</div>
</div>
<div class="form-group" *ngIf="roleType === 6 && roleType !== 5">
<label>Fax</label>
<input type="text" class="form-control" placeholder="Enter Fax Number"
formControlName="paFax" [ngClass]="{ 'is-invalid': submitted && f.paFax.errors }">
<div *ngIf="submitted && f.paFax.errors" class="invalid-feedback">
<div *ngIf="f.paFax.errors.required">Fax Number is required</div>
</div>
</div>
<div class="form-group" *ngIf="roleType !== 4">
<label>Email</label>
<input type="email" class="form-control" placeholder="Enter Email" formControlName="paEmail"
[ngClass]="{ 'is-invalid': submitted && f.paEmail.errors }">
<div *ngIf="submitted && f.paEmail.errors" class="invalid-feedback">
<div *ngIf="f.paEmail.errors.required">Email is required</div>
</div>
</div>
</div>
</div>
</div>
<div class="col-lg-12 col-md-12 col-sm-12 mt-3" *ngIf="roleType !== 4 && roleType !== 5">
<div class="card">
<div class="card-header">
PRIMARY DOCUMENT
</div>
<div class="card-body">
<div class="form-group">
<label>Document</label>
<select class="form-control" formControlName="primaryDocument"
[ngClass]="{ 'is-invalid': submitted && f.primaryDocument.errors }">
<option value="">Select Document</option>
<option value="1">1</option>
</select>
<div *ngIf="submitted && f.primaryDocument.errors" class="invalid-feedback">
<div *ngIf="f.primaryDocument.errors.required">Document is required</div>
</div>
</div>
<div class="form-group">
<label>Number</label>
<input type="text" class="form-control" placeholder="ID Number"
formControlName="primaryDocumentNumber"
[ngClass]="{ 'is-invalid': submitted && f.primaryDocumentNumber.errors }">
<div *ngIf="submitted && f.primaryDocumentNumber.errors" class="invalid-feedback">
<div *ngIf="f.primaryDocumentNumber.errors.required">ID Number is required</div>
</div>
</div>
<div class="form-group">
<label>Issued by</label>
<select class="form-control" formControlName="primaryDocumentIssuedBy"
[ngClass]="{ 'is-invalid': submitted && f.primaryDocumentIssuedBy.errors }">
<option value="">Select Country</option>
<option *ngFor="let country of countryArray" value="{{country.id}}">{{country.name}}
</option>
</select>
<div *ngIf="submitted && f.primaryDocumentIssuedBy.errors" class="invalid-feedback">
<div *ngIf="f.primaryDocumentIssuedBy.errors.required">Country is required</div>
</div>
</div>
<div class="form-group">
<label>Expiration</label>
<input type="text" class="form-control" placeholder="Select Expiration Date" bsDatepicker
formControlName="primaryDocumentExp"
[ngClass]="{ 'is-invalid': submitted && f.primaryDocumentExp.errors }">
<div *ngIf="submitted && f.primaryDocumentExp.errors" class="invalid-feedback">
<div *ngIf="f.primaryDocumentExp.errors.required">Expiration Date is required</div>
</div>
</div>
</div>
</div>
</div>
<div class="col-lg-12 col-md-12 col-sm-12 mt-3" *ngIf="roleType === 6">
<div class="card">
<div class="card-header">
SECONDARY DOCUMENT
</div>
<div class="card-body">
<div class="form-group">
<label>Document</label>
<select class="form-control" formControlName="secondaryDocument"
[ngClass]="{ 'is-invalid': submitted && f.secondaryDocument.errors }">
<option value="">Select Document</option>
<option value="1">1</option>
</select>
<div *ngIf="submitted && f.secondaryDocument.errors" class="invalid-feedback">
<div *ngIf="f.secondaryDocument.errors.required">Document is required</div>
</div>
</div>
<div class="form-group">
<label>Number</label>
<input type="text" class="form-control" placeholder="ID Number"
formControlName="secondaryDocumentNumber"
[ngClass]="{ 'is-invalid': submitted && f.secondaryDocumentNumber.errors }">
<div *ngIf="submitted && f.secondaryDocumentNumber.errors" class="invalid-feedback">
<div *ngIf="f.secondaryDocumentNumber.errors.required">ID Number is required</div>
</div>
</div>
<div class="form-group">
<label>Issued by</label>
<select class="form-control" formControlName="secondaryDocumentIssuedBy"
[ngClass]="{ 'is-invalid': submitted && f.secondaryDocumentIssuedBy.errors }">
<option value="">Select Country</option>
<option *ngFor="let country of countryArray" value="{{country.id}}">{{country.name}}
</option>
</select>
<div *ngIf="submitted && f.secondaryDocumentIssuedBy.errors" class="invalid-feedback">
<div *ngIf="f.secondaryDocumentIssuedBy.errors.required">Country is required</div>
</div>
</div>
<div class="form-group">
<label>Expiration</label>
<input type="text" class="form-control" placeholder="Select Expiration Date" bsDatepicker
formControlName="secondaryDocumentExp"
[ngClass]="{ 'is-invalid': submitted && f.secondaryDocumentExp.errors }">
<div *ngIf="submitted && f.secondaryDocumentExp.errors" class="invalid-feedback">
<div *ngIf="f.secondaryDocumentExp.errors.required">Expiration Date is required</div>
</div>
</div>
</div>
</div>
</div>
<div class="col-lg-12 col-md-12 col-sm-12 mt-3" *ngIf="roleType === 2">
<div class="card">
<div class="card-header">
PILOT'S LICENSE
</div>
<div class="card-body">
<div class="form-group">
<label>Document</label>
<select class="form-control" formControlName="pilotDocument"
[ngClass]="{ 'is-invalid': submitted && f.pilotDocument.errors }">
<option value="1">Pilot's License</option>
</select>
<div *ngIf="submitted && f.pilotDocument.errors" class="invalid-feedback">
<div *ngIf="f.pilotDocument.errors.required">Document is required</div>
</div>
</div>
<div class="form-group">
<label>Number</label>
<input type="text" class="form-control" placeholder="ID Number"
formControlName="pilotDocumentNumber"
[ngClass]="{ 'is-invalid': submitted && f.pilotDocumentNumber.errors }">
<div *ngIf="submitted && f.pilotDocumentNumber.errors" class="invalid-feedback">
<div *ngIf="f.pilotDocumentNumber.errors.required">ID Number is required</div>
</div>
</div>
<div class="form-group">
<label>Issued by</label>
<select class="form-control" formControlName="pilotDocumentIssuedBy"
[ngClass]="{ 'is-invalid': submitted && f.pilotDocumentIssuedBy.errors }">
<option value="">Select Country</option>
<option *ngFor="let country of countryArray" value="{{country.id}}">{{country.name}}
</option>
</select>
<div *ngIf="submitted && f.pilotDocumentIssuedBy.errors" class="invalid-feedback">
<div *ngIf="f.pilotDocumentIssuedBy.errors.required">Country is required</div>
</div>
</div>
<div class="form-group">
<label>Expiration</label>
<input type="text" class="form-control" placeholder="Select Expiration Date" bsDatepicker
formControlName="pilotDocumentExp"
[ngClass]="{ 'is-invalid': submitted && f.pilotDocumentExp.errors }">
<div *ngIf="submitted && f.pilotDocumentExp.errors" class="invalid-feedback">
<div *ngIf="f.pilotDocumentExp.errors.required">Expiration Date is required</div>
</div>
</div>
</div>
</div>
</div>
</div>
<div class="row mt-4">
<div class="col-md-12">
<button class="btn btn-md btn-primary" type="submit"> Add Person</button>
<button class="btn btn-md btn-primary float-right" type="button"> Cancel</button>
</div>
</div>
</form>
ts file
export class addPersonComponent implements OnInit {
roleType: number = 1;
addPerson: FormGroup;
submitted = false;
countryArray = [];
Ispax: boolean = false;
constructor(private formBuilder: FormBuilder, private router: Router, private flashPassService: FlashpassService, protected loadingService: LoadingService) {
}
ngOnInit() {
this.initForm();
this.getListofCountry();
}
initForm() {
this.addPerson = this.formBuilder.group({
personRoleType: ['1'],
firstName: [''],
lastName: [''],
middleName: [''],
gender: [''],
birthDate: [''],
birthCity: [''],
birthState: [''],
birthCountry: [''],
birthResidence: [''],
birthCitizenship: [''],
paStreet: [''],
paCity: [''],
paState: [''],
paPostalCode: [''],
paCountry: [''],
paPhone: [''],
paFax: [''],
paEmail: [''],
primaryDocument: [''],
primaryDocumentNumber: [''],
primaryDocumentIssuedBy: [''],
primaryDocumentExp: [''],
secondaryDocument: [''],
secondaryDocumentNumber: [''],
secondaryDocumentIssuedBy: [''],
secondaryDocumentExp: [''],
pilotDocument: [''],
pilotDocumentNumber: [''],
pilotDocumentIssuedBy: [''],
pilotDocumentExp: [''],
});
}
// initialize form instance.
get f() { return this.addPerson.controls; }
// Signup form submit function.
onSubmit() {
this.submitted = true;
if (this.addPerson.invalid) {
return;
}
// this.router.navigate(['/companies']);
}
getListofCountry() {
this.loadingService.startLoading();
this.flashPassService.getCountryList().subscribe(data => {
this.countryArray = Object.assign([], data);
this.loadingService.endLoading();
});
}
onChangeRole(type) {
}
您可以在标签更改事件中使用 this.f.<yourFormControlName>.setValidators([yourValidator])
方法。手动为您的表单字段设置验证,或者您也可以设置自定义错误 this.f.<yourFormControlName>.setErrors({yourCustomError});