【发布时间】:2016-08-30 14:39:25
【问题描述】:
我对以下验证器函数有疑问:
export function validateEmailKnownFactory(userAccountService: UserAccountService): {[key: string]: any} {
return (control: AbstractControl) => {
return control
.valueChanges
.debounceTime(1000)
.switchMap(value => userAccountService.checkAvailability(value))
.map(res => {
if (res.json() === false) {
return null;
}
//Control flow does get through here
return {emailKnownValidator: {unknown: true}};
});
};
}
它没有在表单控件上设置错误对象(即{emailKnownValidator: {unknown: true}}),但控制流确实通过了正确的位置。
现在,如果我将上述函数替换为以下内容:
export function validateEmailKnownFactory(userAccountService: UserAccountService): {[key: string]: any} {
return (control: AbstractControl) => {
return userAccountService.checkAvailability(control.value)
.map(res => {
if (res.json() === false) {
return null;
}
return {emailKnownValidator: {unknown: true}};
});
};
}
错误对象在表单控件上设置得很好,应用程序按预期运行。
注意区别:我从control.valueChanges 得到Observable,然后调用debounceTime,而另一个函数直接调用checkAvailability。
为了完整起见,这里是 checkAvailability 方法:
checkAvailability(email: string) {
let body = 'email=' + email;
return this.http.get(this.urls.USER_ACCOUNT.EMAIL_AVAILABLE + body);
}
【问题讨论】:
标签: angular rxjs angular2-forms rxjs5