Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/angular/27.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Angular 8自定义验证器从不返回错误_Angular_Angular Reactive Forms - Fatal编程技术网

Angular 8自定义验证器从不返回错误

Angular 8自定义验证器从不返回错误,angular,angular-reactive-forms,Angular,Angular Reactive Forms,我创建了一个带有自定义验证器的表单组,用于比较DTFIND和dtFin(dtFin必须高于DTFIND): ngOnInit(){ this.pensionForm=this.fb.group({ DTF:['',验证器。必需], dtFin:[''[this.dateValidator]], montant:['',验证器。必需], nivInv:['',验证器。必需], }); 得到f(){ 返回this.pensionForm.controls; } onSubmit2(){ this.s

我创建了一个带有自定义验证器的表单组,用于比较DTFIND和dtFin(dtFin必须高于DTFIND):

ngOnInit(){
this.pensionForm=this.fb.group({
DTF:['',验证器。必需],
dtFin:[''[this.dateValidator]],
montant:['',验证器。必需],
nivInv:['',验证器。必需],
});
得到f(){
返回this.pensionForm.controls;
}
onSubmit2(){
this.submitted=true;
console.log(this.f.dtFin);
如果(此.pensionForm.invalid){
回来
}
}
dateValidator():验证器fn{
返回(控件:AbstractControl):ValidationErrors | null=>{
if(control.value
但是dtFin表单控件从不返回错误,表单控件始终是“有效的”。而且,属性f未知……我如何捕获错误?

尝试下面的方法

export function dateValidator(dtFin: FormControl,dtDebut : FormControl ) {
    return (control: AbstractControl): ValidationErrors | null => {
    if (dtFin.value < dtDebut.value) {
      return { dateValidator: true };
    }else{
        return null;
     }
   }
}



  ngOnInit(){
  this.pensionForm = this.fb.group({
  dtDebut: ['', Validators.required],
  dtFin: ['', Validators.compose([Validators.required, dateValidator])],
  montant: ['', Validators.required],
  nivInv: ['', Validators.required],
 });
}
导出函数dateValidator(dtFin:FormControl,dtFin:FormControl){ 返回(控件:AbstractControl):ValidationErrors | null=>{ if(dtFin.value
由于要比较两个表单控件,因此必须为表单组设置验证器。这可以按如下方式完成

dateValidator(group: FormGroup) {
    if(group.get('dtFin').value < group.get('dtDebut').value) {
        return { dateValidator: true };
    } else {
    return null; 
    }
}

ngOnInit(){
    this.pensionForm = this.fb.group({
        dtDebut: ['', Validators.required],
        dtFin: ['', Validators.required],
        montant: ['', Validators.required],
        nivInv: ['', Validators.required],
    }, {validators: [dateValidator]});
 }
dateValidator(组:FormGroup){
if(group.get('dtFin').value
我建议您尝试在浏览器中使用javascript控制台并在那里进行调试,看看过滤器中到底发生了什么,或者使用stack blitz提供一个最小的工作示例,我们可以使用它更好地理解问题。您的代码相对不完整,说明对理解没有太大帮助丁正是问题所在。Grpup基本验证器是最好的案例,她说你是对的,
dateValidator(group: FormGroup) {
    if(group.get('dtFin').value < group.get('dtDebut').value) {
        return { dateValidator: true };
    } else {
    return null; 
    }
}

ngOnInit(){
    this.pensionForm = this.fb.group({
        dtDebut: ['', Validators.required],
        dtFin: ['', Validators.required],
        montant: ['', Validators.required],
        nivInv: ['', Validators.required],
    }, {validators: [dateValidator]});
 }