Если предположить, что роль пользователя не изменится после установки валидатора, подход будет следующим:
import {ValidatorFn, Validators} from '@angular/forms';
function createCellPhoneValidator(user: FooUser): ValidatorFn {
return user.role === x ? Validators.required : Validators.nullValidator;
}
export class FooComponent {
buildForm(): void {
this.accountForm = this.formBuilder.group({
firstName: [this.user.firstName, Validators.required],
initials: [this.user.initials, Validators.required],
lastNamePrefix: [this.user.lastNamePrefix],
lastName: [this.user.lastName, Validators.required],
cellPhoneNumber: [this.user.cellPhoneNumber, createCellPhoneValidator(this.user)],
});
}
}
Если роль может измениться, то вам необходимо будет повторно оценитьроль каждый раз перед выполнением проверки.Это можно сделать как:
import {ValidatorFn, Validators} from '@angular/forms';
export class FooComponent {
buildForm(): void {
this.accountForm = this.formBuilder.group({
firstName: [this.user.firstName, Validators.required],
initials: [this.user.initials, Validators.required],
lastNamePrefix: [this.user.lastNamePrefix],
lastName: [this.user.lastName, Validators.required],
cellPhoneNumber: [this.user.cellPhoneNumber, this.cellPhoneValidator],
});
}
private readonly cellPhoneValidator: ValidatorFn = c => {
return this.user.role === "x" ? Validators.required(c) : Validators.nullValidator(c);
}
}