如何使用 Reactive Forms (Angular2 RC3) 进行异步验证?

Posted

技术标签:

【中文标题】如何使用 Reactive Forms (Angular2 RC3) 进行异步验证?【英文标题】:How to do asynchronous validation with Reactive Forms (Angular2 RC3)? 【发布时间】:2017-01-17 14:10:16 【问题描述】:

我发现这个tutorial 可以进行异步验证。这不再适用于 RC3(Reactive Froms)。

这里怎么做异步验证?

this.username = new FormControl( '', [ <any>Validators.required, <any>ProfileValidator.usernameTaken ]);

...

class ProfileValidator 

 static usernameTaken(control: FormControl): Promise<[key:string]:boolean> 

   let q = new Promise((resolve, reject) => 
     setTimeout(() => 
       resolve(null);
     , 1000)
   );

   return q;
 


FormControl 始终无效...

【问题讨论】:

检查github.com/angular/angular/issues/1068 【参考方案1】:

表单控件的签名应该将异步验证器作为第三个参数,如下所示:

new FormControl( '', 
    [ <any>Validators.required], //sync
    [<any>ProfileValidator.usernameTaken ] //async
    );

【讨论】:

以上是关于如何使用 Reactive Forms (Angular2 RC3) 进行异步验证?的主要内容,如果未能解决你的问题,请参考以下文章

Angular 2 Reactive Forms 问题如何以角度方式而不是 jquery 方式进行

Reactive Forms

html 设置验证错误Reactive Forms

typescript 在Reactive Forms中添加控件

Angular Reactive forms : change vs valueChanges

Angular 9 Reactive Forms:使用 trackBy 时复选框未更新