Mam formularz, w którym zbieram numery telefonów (komórkowe, osobiste, inne). Muszę mieć co najmniej wypełnione dane wejściowe. Próbuję użyć Angular2 FormBuilder.Angular2 FormBuilder Validatiors: wymagane jest wypełnienie co najmniej jednego pola w grupie
Po wielu badaniach mam problem z obejściem tego problemu. Wiem, że mogę to zrobić za pomocą innych metod, ale zastanawiałem się, czy jest to możliwe przy użyciu FormBuilder Validators. Jeśli dodaję "Validators.required", wszystkie 3 pola będą wymagane. Wszelkie sugestie lub pomysły?
phone: this._fb.group(
{
other: [''],
personal: [''],
mobile: [''],
}
bazowa na podpowiedź z "JB Nizet", oto co miałem do wdrożenia, aby to działało:
Moja grupa Validator (to musi jeszcze szczypanie):
static phoneExists(group: FormGroup): { [key: string]: any } {
if (null != group) {
var other: AbstractControl = group.controls['other'];
var mobile: AbstractControl = group.controls['mobile'];
var personal: AbstractControl = group.controls['personal'];
var data: Object = group.value;
return (
(other.valid && isEmptyInputValue(other.value))
&& (mobile.valid && isEmptyInputValue(mobile.value))
&& (personal.valid && isEmptyInputValue(personal.value))
)
? { 'required': true }
: null;
}
}
My zmiana grupy:
phone: this._fb.group(
{
other: [''],
personal: [''],
mobile: [''],
},
{ validator: MyValidators.phoneExists }
)
Zajęło mi trochę czasu, ale kluczem jest dodanie słowa kluczowego "walidator" i spowoduje to, że grupa va lidator do ognia.
W HTML I dodaje następujące:
<small *ngIf="!myForm.controls.profile.controls.phone.valid" class="text-danger">
At least one phone is required.
</small>
Mam nadzieję, że to pomoże nikogo innego.
Musisz określić walidator na samą grupę, a to weryfikator musi sprawdzić, że przynajmniej jeden z jej kontroli ma wartość. –
Ten [** samouczek **] (https://scotch.io/tutorials/how-to-implement-conditional-validation-in-angular- 2-model-driven-forms) może być przydatny. – developer033
Dziękuję JB Nizet za podpowiedź. – Manny