Если вы хотите стилизовать поле, если у контроллера есть требуемый валидатор, вы можете использовать эту утилиту:
isRequired(formControl: AbstractControl): boolean {
return this.hasRequiredField(formControl);
}
hasRequiredField = (abstractControl: AbstractControl): boolean => {
// caso formControl
if (abstractControl.validator) {
const validator = abstractControl.validator({} as AbstractControl);
if (validator && validator.required) {
return true;
}
} // caso formGroup
if (abstractControl['controls']) {
for (const controlName in abstractControl['controls']) {
if (abstractControl['controls'][controlName]) {
if (this.hasRequiredField(abstractControl['controls'][controlName])) {
return true;
}
}
}
}
return false;
}
в вашем контроллере
isRequired(formControlName){
isRequired(formControlName: string): boolean {
return this.utils.isRequired(this.form.get(formControlName));
}
}
, если вы хотите показать сообщениеесли поле недопустимо и применяется стиль, вы можете использовать просто свойство «valid». Для отображения сообщения об ошибке, когда поле недопустимо, объект возвращается в hasError ('required')
Теперь, если вы хотите стилизовать
<label> Name {{isRequired('name') ? '*' :'' }} </label>
<input-text formControlName="name" [ngClass]="{'required': isRequired('name'), 'notValid' : !this.form.get('name').valid }"></input>
<span class="help-block error" *ngIf="((form.get('name').touched || form.get('name').dirty) && !form.get('name').valid)">
<span *ngIf="form.get('name').hasError('required')">
{{ 'ERROR_MSG.REQUIRED' | translate }}
</span>
<span *ngIf="form.get('name').hasError('maxlength')">
{{ 'ERROR_MSG.MAXLENGTH' | translate }} {{getError('maxlength').requiredLength}}
</span>
<span *ngIf="form.get('name').hasError('minlength')">
{{ 'ERROR_MSG.MINLENGTH' | translate }} {{getError('minlength').requiredLength}}
</span>
<span *ngIf="form.get('name').hasError('myCustomError')">
{{ 'ERROR_MSG.CUSTOM' | translate }}
</span>
</span>
</div>
getError(error: string) {
return this.form.controls['name'].errors[error];
}