Я проверяю форму для колл-центра, где обычно поля заполняются в определенном порядке c. Я хочу поднять ошибку для нескольких полей, если пользователь пропускает вперед. Я обнаружил, что работает ниже:
export const recordValidator: ValidatorFn = (control: FormGroup): ValidationErrors | null => {
if(!firstField.value && !secondField.Value && !thirdField.value)
{
firstField.setErrors({ "firstFieldError" : true});
secondField.setErrors({ "secondFieldError" : true});
return {"firstFieldError" : true, "secondFieldError" : true};
}
}
И как firstField, так и secondField показывают ошибки правильно.
Теперь согласно документам ValidationErrors - это просто карта ошибок. Но у него, очевидно, нет никаких методов, поэтому я подумал, что я просто приведу существующую карту к ValidationErrors и верну это:
export const recordValidator: ValidatorFn = (control: FormGroup): ValidationErrors | null => {
if(!firstField.value && !secondField.Value && !thirdField.value)
{
firstField.setErrors({ "firstFieldError" : true});
secondField.setErrors({ "secondFieldError" : true});
let errorMap = new Map();
errorMap.set("firstFieldError",true);
errorMap.set("secondFieldError",true);
let errorValidators:ValidationErrors = errorMap;
return errorValidators;
}
}
, но это не вызовет никаких ошибок.
Мой шаблон выглядит следующим образом:
<mat-form-field>
<input formControlName="firstField" type="datetime-local" placeholder="First Field" [errorStateMatcher]="errorMatcher" matInput>
<mat-error *ngIf="Form.errors?.firstFieldError">
First field error!
</mat-error>
</mat-form-field>
Может кто-нибудь помочь мне понять, почему первый работает, а второй нет