Я устанавливаю валидаторы форм, где минимальное и максимальное количество полей выбираются через один API.Приложение вылетает при попытке передать одно из этих асинхронных значений в пользовательский параметр валидатора, но оно будет работать, когда значение жестко запрограммировано.
Ошибка, полученная при передаче асинхронного значения, следующая:
ОШИБКА: formGroup ожидает экземпляр FormGroup.Пожалуйста, введите один.
file.ts:
export class PackageDimensionValidator {
static validSize(min: number, max: number): ValidatorFn {
return (control: AbstractControl): { [key: string]: boolean } | null => {
if (control.value !== undefined && (isNaN(control.value) || control.value < min || control.value > max)) {
return { 'exceedRange': true };
}
return null;
};
}
}
// ...
ngOnInit() {
// Retrieve maximum package dimensions for input data validation.
this.shipmentService.getMaxPackageSize()
.subscribe(result => {
this.packageRestrictions = new PackageRestrictions(result);
console.dir(this.packageRestrictions);
this.setupPackageValidators();
});
}
setupPackageValidators() {
const maxWidth = this.packageRestrictions.maxWidth; // Crashes on Async value.
// const maxWidth = 5; // Works on hard-coded value.
// Setup package dimension validators.
this.packageSizeForm = this.formBuilder.group({
maxWidth: new FormControl('', Validators.compose([
PackageDimensionValidator.validSize(null, maxWidth),
// Other validators ...
]))
});
}
file.html:
<form [formGroup]="packageSizeForm">
<input formControlName="maxWidth" type="text" required />
</form>
В идеале должно быть несколько formControls
каждый с уникальными минимальными и максимальными значениями, которые все выбираются одновременно одним API.Мысленный процесс состоял в том, чтобы вызвать этот API, сохранить его результат локально, а затем создать валидаторы формы.Сейчас я подвергаю сомнению порядок этой последовательности.