如何以 angular 反应形式强制一个日期大于另一个日期?
How to enforce that one date is bigger than the other in angular reactive form?
我有以下反应形式:
newTripForm = this.formBuilder.group({
name: new FormControl('', Validators.compose([Validators.required, Validators.minLength(3)])),
startDate: new FormControl('', Validators.required),
endDate: new FormControl(''),
});
如何添加验证器强制结束日期大于开始日期?另外,有没有办法检查 startDate 和 endDate 是否是日期?我没有找到任何验证器?
非常感谢您(对于菜鸟问题深表歉意)
您目前使用的验证器是FormControl
-验证器。他们验证了一个 FormControl
。您还可以自己编写一个验证器来验证 FormArray
或 FormGroup
。
验证器看起来像这样:
dateOrderValidator(formGroup: FormGroup): ValidationErrors | null {
const startDate = formGroup.controls['startDate']?.value;
const endDate = formGroup.controls['endDate']?.value;
// validate date-strings
// catch missing values
if (Date.parse(startDate).getTime() >= Date.parse(endDate).getTime)) {
// return an appropriate error
}
}
表单生成器
FormBuilder 的主要目的是为我们节省一些样板文件。代替
name: new FormControl(...)
我们可以写
name: ['initialValue', [<synchronous validators>], [<asynchronous validators]]
甚至更少(如果我们没有验证器):
name: 'initialValue'
如果您的控件是一个普通的日期输入,这将完成这项工作,如果您的控件是自定义类型,例如 ngBootstrap 日期选择器“就像我的情况”,您可以格式化这些值
export class DateValidators {
static greaterThan(startControl: AbstractControl): ValidatorFn {
return (endControl: AbstractControl): ValidationErrors | null => {
const startDate: Date = startControl.value;
const endDate: Date = endControl.value;
if (!startDate || !endDate) {
return null;
}
if (startDate >= endDate) {
return { greaterThan: true };
}
return null;
};
}
}
用法
const startControl = this.formBuilder.control('');
const endControl = this.formBuilder.control('', [DateValidators.greaterThan(startControl)]);
我有以下反应形式:
newTripForm = this.formBuilder.group({
name: new FormControl('', Validators.compose([Validators.required, Validators.minLength(3)])),
startDate: new FormControl('', Validators.required),
endDate: new FormControl(''),
});
如何添加验证器强制结束日期大于开始日期?另外,有没有办法检查 startDate 和 endDate 是否是日期?我没有找到任何验证器?
非常感谢您(对于菜鸟问题深表歉意)
您目前使用的验证器是FormControl
-验证器。他们验证了一个 FormControl
。您还可以自己编写一个验证器来验证 FormArray
或 FormGroup
。
验证器看起来像这样:
dateOrderValidator(formGroup: FormGroup): ValidationErrors | null {
const startDate = formGroup.controls['startDate']?.value;
const endDate = formGroup.controls['endDate']?.value;
// validate date-strings
// catch missing values
if (Date.parse(startDate).getTime() >= Date.parse(endDate).getTime)) {
// return an appropriate error
}
}
表单生成器
FormBuilder 的主要目的是为我们节省一些样板文件。代替
name: new FormControl(...)
我们可以写
name: ['initialValue', [<synchronous validators>], [<asynchronous validators]]
甚至更少(如果我们没有验证器):
name: 'initialValue'
如果您的控件是一个普通的日期输入,这将完成这项工作,如果您的控件是自定义类型,例如 ngBootstrap 日期选择器“就像我的情况”,您可以格式化这些值
export class DateValidators {
static greaterThan(startControl: AbstractControl): ValidatorFn {
return (endControl: AbstractControl): ValidationErrors | null => {
const startDate: Date = startControl.value;
const endDate: Date = endControl.value;
if (!startDate || !endDate) {
return null;
}
if (startDate >= endDate) {
return { greaterThan: true };
}
return null;
};
}
}
用法
const startControl = this.formBuilder.control('');
const endControl = this.formBuilder.control('', [DateValidators.greaterThan(startControl)]);