【发布时间】:2017-02-24 07:15:14
【问题描述】:
给定简单的注册表:
this.registerForm = this.formBuilder.group({
email:['', Validators.compose([
Validators.required,
Validators.pattern('.+@.+\..+'),
]), this.validators.isTaken],
matchingPassword: this.formBuilder.group({
password: ['', Validators.compose([
Validators.required,
Validators.maxLength(30),
Validators.minLength(8)
])],
passwordConfirmation: ['', Validators.compose([
Validators.required,
])]
}, {validator: this.validators.match})
})
我正在尝试验证密码确认匹配,因此我将匹配验证器应用于表单组。但是现在我面临的情况是字段本身显示为有效(绿色边框,因为它的所有验证器都通过)但组验证器不是,我需要将它们显示为红色。
那么我应该手动将 ng-valid 更改为 ng-invalid 还是有一些技巧可以更好地解决这个问题?
【问题讨论】:
-
对于您的特定示例,我会将自定义matchingPasswordValidator 放在
passwordConfirmation字段中,因为该字段的内容仅在匹配密码时才有效。对于更通用的组验证器,我只会为整个组提供一般错误消息。 -
@HarryNinh,这种方法的问题在于,如果我将匹配验证器放入
passwordConfirmation,它只会在此字段更改时触发。我的意思是,如果您更改password字段以使其与passwordConfirmation匹配,最后一个仍将标记为无效,因为未在该字段上运行验证。 -
啊,你可以订阅
password的valueChanges事件调用passwordConfirmationControl.updateValueandValidity()函数。 -
SET,找到解决方案了吗?