【发布时间】:2021-11-16 18:43:11
【问题描述】:
我需要创建一个包含 2 个日期、dateFrom 和 dateTo 的表单。 验证的条件是dateFrom不能在dateTo之后,dateTo不能在dateFrom之前。
所以我创建了一个表单组,其中包含两个表单控件和一个共同的验证器来检查这个条件。
export class DateRangeSelector {
dateForm: FormGroup = new FormGroup({
dateFrom: new FormControl({ year: 2017, month: 10 },[this.dateValidator.bind(this)]),
dateTo: new FormControl({ year: 2020, month: 11 }, [this.dateValidator.bind(this)])
});
dateValidator(control: FormControl): { [s: string]: boolean } {
const valueDateFrom = this.dateForm.get('dateForm').value;
const valueDateTo = this.dateForm.get('dateTo').value;
if (valueDateFrom && valueDateTo) {
//please ignore the fact that value is {year: x, month: y}, I need to parse
const dateFrom = moment(valueDateFrom);
const dateTo = moment(valueDateTo);
if (dateFrom.isAfter(dateTo)) {
return { invalidDate: true };
}
}
return null;
}
}
我的问题是 this.dateForm 在验证器尝试验证时未定义(不在上下文中)。我不明白,因为我在 validators 声明中绑定了方法。
【问题讨论】:
-
如果您想验证多个表单控件,请将您的验证器添加到表单组。本主题回答了类似的情况:stackoverflow.com/questions/51094146/…
-
@enno.void 谢谢!
标签: angular validation angular-forms form-control