有条件实现的Angular电子邮件验证程序不同步激发
我只想验证提供的电子邮件地址。据我所知,您可以通过订阅有条件实现的Angular电子邮件验证程序不同步激发,angular,angular-forms,angular2-formbuilder,Angular,Angular Forms,Angular2 Formbuilder,我只想验证提供的电子邮件地址。据我所知,您可以通过订阅valueChanges函数并根据提供的逻辑附加验证器来实现这一点。但是,当我这样做时,验证程序不会在正确的时间启动。空字符串将被设置为无效,但单个字符将被标记为有效 我的示例代码来自模板: <form [formGroup]="formGroup"> Email: <input formControlName="email" type="text"> </form> 您可以在这里看到它的作用:文档中
valueChanges
函数并根据提供的逻辑附加验证器来实现这一点。但是,当我这样做时,验证程序不会在正确的时间启动。空字符串将被设置为无效,但单个字符将被标记为有效
我的示例代码来自模板:
<form [formGroup]="formGroup">
Email: <input formControlName="email" type="text">
</form>
您可以在这里看到它的作用:文档中说它将更新其祖先的有效性。在这种情况下,在父FormGroup上调用它似乎不会更新子电子邮件控件
解决方案应该是在电子邮件控件本身上调用updateValue和validity
,但当这种情况发生时,它将导致valueChanges
接收新值,这将导致无限循环。通过传递选项{emitEvent:false}
它应该绕过值更改
,并按预期的方式运行
this.formGroup.get('email').valueChanges.subscribe(value => {
if (!this.formGroup.get('email').value) {
this.formGroup.get('email').clearValidators();
} else {
this.formGroup.get('email').setValidators(Validators.email);
}
this.formGroup.get('email').updateValueAndValidity({emitEvent: false});
});
是否与此处报告的问题相同:
this.formGroup.get('email').valueChanges.subscribe(value => {
if (!this.formGroup.get('email').value) {
this.formGroup.get('email').clearValidators();
} else {
this.formGroup.get('email').setValidators(Validators.email);
}
this.formGroup.get('email').updateValueAndValidity({emitEvent: false});
});