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