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
表单控件上设置错误