【发布时间】:2017-01-26 19:20:11
【问题描述】:
这个想法是让用户发布表单。如果用户已经注册,则触发API返回的错误,将email字段设置为错误。
我在 FormBuilder 中使用反应式表单,并尝试在订阅错误捕获器中调用验证器:
构造函数:
this.email = fb.control('', [Validators.required, Validators.pattern(/^[^\s@]+@[^\s@]+\.[^\s@]{2,}$/), SignupComponent.alreadyExist()]);
this.username = fb.control('', [Validators.required, Validators.pattern(/^([A-ZÀ-ÿa-z0-9]{2,})+(?:[ _-][A-ZÀ-ÿa-z0-9]+)*$/)]);
this.userRegisterForm = fb.group({
email: this.email,
username: this.username
});
自定义 alreadyExist() 验证器:
static alreadyExist(alreadyExist: boolean = false): any {
return (control: FormControl): { [s: string]: boolean } => {
if(alreadyExist) {
return { emailAlreadyExist: true }
}
}
}
onSubmit():
this.user.create(newUser)
.subscribe(
data => {
this.router.navigate(['signin']);
},
error => {
if(error.status === 401) {
// CALL THE VALIDATOR HERE TO SET : FALSE
SignupComponent.alreadyExist(true);
}
this.loading = false;
});
似乎调用了验证器,但从未调用过其中返回的匿名方法......也许不是一个好习惯,任何人都可以突出显示我吗?谢谢
【问题讨论】:
标签: angular typescript formbuilder customvalidator