我发现这个反应式表单自定义验证代码段,只要用户输入 test @ yc emailIsTaken: true formControl的错误对象中在1500ms之后添加emailAddress
>
takenEmailAddress(control: FormControl): Promise<any> | Observable<any> {
const promise = new Promise((resolve, reject) => {
setTimeout(() => {
if (control.value === 'test@y.c') {
resolve({'emailIsTaken': true});
} else {
resolve(null);
}
}, 1500);
});
return promise;
}
我喜欢观察者解决发展和可读性问题的方式。在我读到的时候,好处是巨大的。我怎样才能将这样的东西转换为可观察的模式?
一种Observable模式,只要用户输入 test @ yc
emailIsTaken: true添加到emailAddress
formControl的errors对象中>
可观察模式中resolve
和reject
的对应部分是什么?
答案 0 :(得分:0)
FormControl类有成员ValueChanges和StatusChanges,它们都返回Observables,你可以直接在FormControl上使用它。
这样的事可能有用:
email: FormControl;
emailTaken: bool;
ngOnInit() {
this.email.valueChanges.subscribe(value => {
if (value === 'testy@y.c")
this.emailTaken = true;
else
this.emailTaken = false;
},
error => //Handle error here
);
}
这可能不是最好的解决方案,但它可能会给你一个想法。只要FormControl中的值发生变化,就会检查其是否有效。
注意:此示例不会异步工作。
您还可以直接从承诺创建一个observable:
const observable = Observable.fromPromise(takenEmailAddress(control));
observable.subscribe(value => /*Do something to handle the value*/ ,
err => /*Handle the error*/