Angular 我可以使用主题来创建自定义异步验证器吗?
我有没有可能用一个主题来达到这个目的?目前,我只有一个承诺才能做到这一点。所以我调用了resolve方法,这是正确的 我试图做到以下几点Angular 我可以使用主题来创建自定义异步验证器吗?,angular,angular-forms,angular-validation,angular-observable,Angular,Angular Forms,Angular Validation,Angular Observable,我有没有可能用一个主题来达到这个目的?目前,我只有一个承诺才能做到这一点。所以我调用了resolve方法,这是正确的 我试图做到以下几点 forbiddenEmail(control: FormControl): Observable<any> { const obs = new Subject(); setTimeout(() => { if (control.value === 'test@test.com') { obs.ne
forbiddenEmail(control: FormControl): Observable<any> {
const obs = new Subject();
setTimeout(() => {
if (control.value === 'test@test.com') {
obs.next({'emailIsForbidden': true});
} else {
obs.next(null);
}
}, 2000);
return obs;
}
根据文档,您可以通过返回可观察到的数据来实现这一点: 我试图用代码示例来证明它,但它看起来并不像它应该的那样工作
这看起来像是角度问题本身,这里有报道:你需要完成你的可观测:
setTimeout(() => {
if (control.value === 'test@test.com') {
obs.next({'emailIsForbidden': true});
} else {
obs.next(null);
}
obs.complete();
}, 2000);
但这可以用更简单的方式来定义:
forbiddenEmail2(control: FormControl): Observable<any> {
const result = control.value === 'test@test.com' ? {'emailIsForbidden': true} : null;
return Observable.of(result).delay(2000);
}
forbiddenEmail2(控件:FormControl):可观察绝对可以,只需返回主题并带有asObservable()
:
禁止电子邮件(控制:FormControl):可观察{
常量主题=新主题();
设置超时(()=>{
如果(control.value==='test@test.com') {
subject.next({emailIsForbidden:true});
}否则{
subject.next(空);
}
}, 2000);
返回subject.asObservable();
}
非常感谢。有趣的是,第二条路没有走;因为某种原因,我不能为我工作。尽管它在演示中起作用。它又在等待了。但我很高兴我在这个问题上得到了答案。我想问题是,受试者需要取消订阅,这就完成了吗?
forbiddenEmail2(control: FormControl): Observable<any> {
const result = control.value === 'test@test.com' ? {'emailIsForbidden': true} : null;
return Observable.of(result).delay(2000);
}
forbiddenEmail(control: FormControl): Observable<any> {
const subject = new Subject();
setTimeout(() => {
if (control.value === 'test@test.com') {
subject.next({ emailIsForbidden: true });
} else {
subject.next(null);
}
}, 2000);
return subject.asObservable();
}