Angular 角形';确认密码';显示错误

Angular 角形';确认密码';显示错误,angular,angular-reactive-forms,formbuilder,Angular,Angular Reactive Forms,Formbuilder,我正在使用角度窗体创建一个注册表窗体。 我做了一个自定义验证器,检查密码是否与确认密码字段相同。虽然未显示“密码不匹配”错误,但在输入所有字段之前,输入仍为红色 使用自定义验证程序方法检查密码的表单生成器checkPasswords this.registerForm=this.formBuilder.group({ 名字:['',验证器。必需], lastName:['',验证程序。必需], 电子邮件:['',[Validators.required,Validators.email]], 密

我正在使用角度窗体创建一个注册表窗体。 我做了一个自定义验证器,检查密码是否与确认密码字段相同。虽然未显示“密码不匹配”错误,但在输入所有字段之前,输入仍为红色

使用自定义验证程序方法检查密码的表单生成器
checkPasswords

this.registerForm=this.formBuilder.group({
名字:['',验证器。必需],
lastName:['',验证程序。必需],
电子邮件:['',[Validators.required,Validators.email]],
密码:[''[Validators.required]],
confirmPassword:[''[Validators.required]]
},
{validator:this.checkPasswords});
检查密码(组:FormGroup){
//这里有“密码”组
let pass=group.get('password').value;
让confirmPassword=group.get('confirmPassword').value;
返回密码===confirmPassword?null:{notSame:true};
}
还有下面的html


密码无效
密码不匹配
我尝试过进行一些调试,我认为这是因为在输入所有字段之前表单组状态为“无效”,但
confirmPassword
的表单组控件显示为有效。 如何获取confirmPassword的状态以使用其控件的状态

谢谢

所有输入都是红色的吗

可能是材质输入首先检查控件是否被触摸或弄脏(在将其标记为红色之前),但如果表单本身无效,则会立即将其标记为红色

查看代码,似乎在用户填写
confirmPassword
字段之前,
registerForm
末尾的验证器已经运行,并将
registerForm
标记为无效

选项:
  • checkPasswords
    验证程序专门应用于
    confirmPassword
    而不是整个表单如何

  • checkPasswords
    中,检查
    confirmPassword
    控件是否被触摸或弄脏(除了
    不相同的


  • 这是因为有角度的材料。如果给定控件上没有错误,
    将不可见。您需要在
    confirmPassword
    字段中设置错误以显示错误。

    请提供一个关于不完全确定问题是什么的工作示例…如果您想知道为什么
    confirmPassword
    最初显示为有效,这是因为最初,
    password
    confirmPassword
    都是空字符串……您好,感谢您的回复,如果问题有点混乱,我深表歉意。问题是,即使
    密码
    确认密码
    都有效并且没有显示错误文本,输入框仍然是红色(错误颜色)。这是因为formGroup无效。我没有引用
    confirmPassword
    的formControl。现在可以通过将
    密码
    确认密码
    作为validator中的参数来修复它。嗨,我确实尝试过这一点,但因为我需要
    密码
    的值,所以我无法将验证器放在
    确认密码
    中。修复方法是在函数checkPasswords:
    validator:this.checkPasswords('password','confirmPassword')
    中传入password和confirmPassword作为参数,这是正确的答案。未在
    confirmPassword
    表单控件上设置错误