ihave 3 элемента управления реактивными формами:
- Первое - это имя элемента управления
u_id
, которое должно иметь следующую форму: ADD-DDCDDDDD
, и эта проверка работает должным образом; - Второй - выданный правительством идентификатор
- Третье число - номер этого идентификатора правительства
Я использую библиотеку RxWebValidators
для создания условных валидаторов.
Если пользователь не введет свой собственный u_id
, кнопка сохранения будет отключена, пока, по крайней мере, он не добавит тип идентификатора правительства (паспорт или персональный идентификатор) и, конечно, следует добавить номер этого идентификатора.тоже.
А если пользователь ввел u_id
, он может пропустить часть идентификатора правительства и кнопка будет отключена.
Вот сценарий:
import { Component, OnInit } from '@angular/core';
import { RxwebValidators } from "@rxweb/reactive-form-validators"
import { FormBuilder, FormGroup, Validators, FormControl } from "@angular/forms"
@Component({
selector: 'my-app',
templateUrl: './app.component.html',
styleUrls: ['./app.component.css']
})
export class AppComponent implements OnInit {
name = 'Angular';
userForm: FormGroup
constructor(private formBuilder: FormBuilder) { }
ngOnInit() {
this.userForm = this.formBuilder.group({
'u_id': new FormControl('', [Validators.minLength(12), RxwebValidators.required({ conditionalExpression: (x) => x.gov_id_type === '' && x.gov_id_number === '' }), RxwebValidators.pattern({ pattern: { 'unid': RegExp('^[0-9A-Z]{3}(-)[0-9]{2}(C)[0-9]{5}$') }, conditionalExpression: (x) => x.u_id !== '' })]),
'gov_id_type': new FormControl('', RxwebValidators.required({ conditionalExpression: (x) => x.u_id === '' })),
'gov_id_number': new FormControl('', RxwebValidators.required({ conditionalExpression: (x) => x.gov_id_type !== '' }))
})
}
}
И html-скрипт:
<div>
<div class="container">
<main class="col-12">
<h3 class="bd-title" id="content">Conditional Required Validator
</h3>
<br>
<form [formGroup]="userForm">
<div class="form-group">
<input type="text" formControlName="u_id" placeholder="UID" class="form-control" />
</div>
<div class="form-group">
<select id="gov_id_type" formControlName="gov_id_type" placeholder="Gov. ID Type" class="form-control">
<option value="passport">PassPort</option>
<option value="personal_id">Personal ID</option>
</select>
<input matInput id="gov_id_number" formControlName="gov_id_number" placeholder="Gov. ID Number" class="form-control"/>
</div>
<button matButton color="warn" [disabled]="!userForm.valid">
Save Data
</button>
</form></main></div>
И stackblitz для проверки.
Кнопка всегда отключена, и валидаторы не работают