Angular 角度6模板驱动表单交叉域验证清除错误

Angular 角度6模板驱动表单交叉域验证清除错误,angular,cross-validation,customvalidator,Angular,Cross Validation,Customvalidator,内部HTML: 从“@angular/core”导入{指令,HostListener}; 从“@angular/forms”导入{ValidationErrors,FormGroup,ValidatorFn,NG_VALIDATORS,Validator,AbstractControl}; 从“/range validator”导入{range validator}; export const rangeValidator:ValidatorFn=(formGroup:formGroup):V

内部HTML:

从“@angular/core”导入{指令,HostListener};
从“@angular/forms”导入{ValidationErrors,FormGroup,ValidatorFn,NG_VALIDATORS,Validator,AbstractControl};
从“/range validator”导入{range validator};
export const rangeValidator:ValidatorFn=(formGroup:formGroup):ValidationErrors | null=>{
让fromAge='',toAge='';
if(formGroup&&formGroup.parent&&formGroup.parent.controls&&formGroup.parent.controls['ageFrom'])){
fromAge=formGroup.parent.controls['ageFrom'];
}
if(formGroup&&formGroup.parent&&formGroup.parent.controls&&formGroup.parent.controls['ageTo'])){
toAge=formGroup.parent.controls['ageTo'];
}
如果(fromAge!==“”&&toAge!==“”){
const rangeVal:RangeValidator=新RangeValidator();
const ret=rangeVal.validateRange(fromAge,toAge);
返回ret;
}
返回null;
};
@指示({
选择器:“[range validator]”,
提供者:[{provide:NG_验证器,useExisting:RangeValidatorDirective,multi:true}]
})
导出类RangeValidator指令实现验证程序{
构造函数(){}
@HostListener('更改',['$event.target']))
验证(控件:AbstractControl):验证错误{
返回范围验证器(控制);
}
}

从年龄应小于到年龄

请输入有效的起始日期


为什么要为此创建自定义指令?它可以通过定制的验证器进行处理,该验证器由angular reactive form提供,我一定会去海关validators@KamranKhatti验证应该通过比较框架中给出的字段和验证器来完成,这两个字段和验证器都不能满足我的要求。为什么不全部比较两个字段的数据呢?如果不满足您的要求,您需要通过错误更正?由我自己解决,如果错误对象为null,则清除错误。如果(ret==null){formGroup.parent.controls['ageFrom'].setErrors(null);formGroup.parent.controls['ageTo'].setErrors(null);}