Angular2 forms Angular 2反应式表单异步自定义验证抛出“订阅非函数”
我已经尝试了答案的每一种排列,但我仍然得到了例外Angular2 forms Angular 2反应式表单异步自定义验证抛出“订阅非函数”,angular2-forms,Angular2 Forms,我已经尝试了答案的每一种排列,但我仍然得到了例外 import {AsyncValidatorFn, AbstractControl } from '@angular/forms'; export function userNameShouldBeUnique(): AsyncValidatorFn { return (control: AbstractControl): { [key: string]: any } => { return new Promise(
import {AsyncValidatorFn, AbstractControl } from '@angular/forms';
export function userNameShouldBeUnique(): AsyncValidatorFn {
return (control: AbstractControl): { [key: string]: any } => {
return new Promise(resolve => {
setTimeout(() => {
if (control.value == 'mosh')
resolve({ shouldBeUnique: true });
else
resolve(null);
}, 1000);
});
}
}
在组件中,最后一次尝试:
this.myForm = this.fb.group({
username: [
'',
Validators.compose([Validators.required, forbiddenNameValidator(/bob/)]),
Validators.composeAsync([userNameShouldBeUnique])
],
password: ['', Validators.required]
});
那么我做错了什么呢?谢谢,解决方案是:
import { AsyncValidatorFn, AbstractControl } from '@angular/forms';
export function UniqueValidator(): AsyncValidatorFn {
return (control: AbstractControl): Promise<any> => {
return new Promise<any>(resolve => {
setTimeout(() => {
if (control.value === 'mosh')
resolve({ shouldBeUnique: true });
else
resolve(null);
}, 1000);
});
};
};
刚刚测试过,它可以工作;导入Rxjs/Rxjs;这可能是一个问题啊-这没有任何帮助-谢谢如果你想在验证器中注入httpinject http呢?为什么?@amrabdulazizmake服务器端验证,例如,如果电子邮件已经存在,我宁愿让验证器只使用逻辑,而不是对服务器的请求。所以我建议最好有一个服务来检索现有电子邮件的列表,并将它们作为param传递给验证器。然后,只需签入该数组。这比每次键入内容时向服务器发出许多请求要好。如果数组有10000个项目要检查怎么办?每个验证周期都应该在服务器端检查它。如果我们使用应该注入服务的服务
username: ['', Validators.required, UniqueValidator()]