matDatepickerMax验证的角度形式问题

时间:2020-10-08 17:53:51

标签: angular angular-material angular-reactive-forms

我正面临以下问题,也许有些人知道如何解决。 我有一个带有不同字段的formGroup,其中之一是带有日期选择器的日期字段。 我正在以编程方式更改日期选择器输入的[max]属性,但是该表单始终使用max属性中的第一个值进行验证,并且收到错误“ matDatepickerMax”。 任何想法,正如我所见,输入工作正常并且最大值已正确更新,但是表单组始终使用旧值进行验证。 预先感谢

1 个答案:

答案 0 :(得分:0)

@Franco,当您创建验证器时,您传递的值就是当前的值。愚人的例子

data={name:'one'}
form=new FormGroup({
   name:new FormControl(data.name)
   control:new FormControl('',this.foolValidator(data.name))
})

foolValidator(name:string)
{
    //only gives error if control.value is "one"
    
    return (control)=>{
       return control.value==name?{repeat:true}:null
    }
}

如果要考虑一个变量,可以“绑定”验证器

data={name:'one'}
form=new FormGroup({
   name:new FormControl(data.name)
   control:new FormControl('',this.foolValidator().bind(this))
})

foolValidator()
{
    return (control)=>{
       return control.value==this.form.get('name').value?{repeat:true}:null
    }
}

或创建自定义验证程序,如

foolValidator()
{
    return (control)=>{
       const form=control.parent;
       if (form)
       {
          const name=form.get('name')
          return name && control.value==name.value?{repeat:true}:null
       }
    }
}

在最后一种情况下,请不要忘记,在更改“名称”时,请创建一个form.get('control').updateValueAndValidity

相关问题