我在angular中使用反应式表单,我需要比较开始日期"start date“和结束日期"end date",这两个控件都在"dateLessThan”函数中验证,但问题是我不知道如何要求控件正在求值
//Some stuff
public fechaInicio = new FormControl('', [
Validators.required
, this.dateLessThanTo
]);
public fechaFin = new FormControl('', [
Validators.required
, this.dateLessThan
]);
createForm() {
this.contratoForm = this.formBuilder.group({
fechas: this.formBuilder.group({
fechaInicio: this.fechaInicio,
fechaFin: this.fechaFin
}, { validator: this.dateLessThan('fechaInicio', 'fechaFin') }),
});
}这里我需要知道用于比较日期的控件的名称:
dateLessThanTo(fieldControl: FormControl) {
//
//if (fechaInicio.value > FechaFin.value){
// return true;
//}
//else{
// return false;
// }
}
//Some stuff发布于 2017-12-15 21:11:39
在您的自定义验证器中,您将获得formGroup fechas,因此您不需要从TS代码传递任何参数:
createForm() {
this.contratoForm = this.formBuilder.group({
fechas: this.formBuilder.group({
fechaInicio: this.fechaInicio,
fechaFin: this.fechaFin
}, { validator: this.dateLessThanTo }),
});
}在您的自定义验证器中:
dateLessThanTo(group: FormGroup) {
if (group.controls.fechaInicio.value > group.controls.fechaFin.value){
return {notValid: true}
}
return null;
}你需要在有效的时候返回null,并设置一个错误,例如当错误无效时返回notValid。
发布于 2018-05-10 04:55:08
从控件中获取父组,然后与当前控件进行比较:
dateLessThanTo(control: AbstractControl) {
let name = this.getName(control);
...
}
private getName(control: AbstractControl): string | null {
let group = <FormGroup>control.parent;
if (!group) {
return null;
}
let name: string;
Object.keys(group.controls).forEach(key => {
let childControl = group.get(key);
if (childControl !== control) {
return;
}
name = key;
});
return name;
}发布于 2019-11-29 19:03:49
在您的组件中,您可以添加一个自定义验证器,如下所示
static customValidator(control: AbstractControl): { [key: string]: any } {
const controlName = (Object.keys(control.parent.controls).find(key => control.parent.controls[key] === control));
if (control.value === 0) {
return {key: {error: 'invalid'}};
}
return null; }在controlName中,您将获得控件的名称。
https://stackoverflow.com/questions/47832981
复制相似问题