发表在

角训练

如何用Angular编写异步表单验证器?

有时,我们需要服务器端信息来验证浏览器中的表单数据。角的AsyncValidators是Angular实现这种异步验证的方法。

如果你熟悉的话Angular中的自定义表单验证,您知道自定义验证器是接受AbstractControl作为一个参数,如果没有验证错误则返回null,或者一个描述错误的对象:

接口ValidatorFn
(c:AbstractControl):ValidationErrors|零

对于异步验证器,方法是相同的。唯一的区别是验证器函数返回一个Observable或ValidationErrors Promise或null,这转换为以下复杂的函数签名:

接口AsyncValidatorFn
(控制:AbstractControl):Promise | Observable

自定义异步验证器的示例

在本例中,我们希望创建一个表单输入,用户可以在其中输入股票交易所股票代码。然后我们调用API来检查符号是否存在。如果不存在,则显示错误消息。另一方面,如果它存在,一切都是好的。

注意异步任务运行时的PENDING验证状态:

下面是上面例子背后的自定义验证器函数:

validateStockSymbol = (control: AbstractControl) => {
const symbol = control.value.toUpperCase();
Const url = ' https://finnhub.io/api/v1/search?q=${symbol} ';
返回this.http.get < > (url) .pipe (
地图((res) = >
res .result ? (
(stock) => stock.symbol. startswith (symbol)
) ?null:{错误:'没有找到匹配的符号'}

};

如您所见,我们发出一个HTTP请求,细化结果,如果找到符号则返回null,或者返回一个对象{错误:'没有找到匹配的符号'}如果没有找到。

然后我们用下面的代码将验证器函数插入到文本输入中:

导出类AppComponent {
myControl = new FormControl(");
构造函数(私有http: HttpClient) {
this.myControl.addAsyncValidators (this.validateStockSymbol);

在HTML模板中,我们用下面的变量向用户显示反馈FormControl

验证状态:{{myControl。statusChanges |异步}} < / p >

验证错误:{{myControl.errors ? . error}} < / p >

就是这样!您可以将此配方应用于任何基于HTTP请求的自定义异步表单验证。

您可以找到完整的代码示例就在斯塔克布利茨

我们还可以将验证器转换为指令,以便它使用中描述的机制与模板驱动的表单一起工作本教程

我叫betway必威滚球.我是Angular的谷歌开发专家,也是角训练在那里我帮助web开发团队学习并熟悉Angular。

如果您在网页开发方面需要任何帮助,请随时与我们联系!

如果你喜欢这篇文章,请鼓掌或分享。你的帮助我永远感激。你也可以点击此处订阅Medium

使用Medium应用程序

一个写着“在应用商店下载”的按钮,如果点击它将引导你进入iOS应用商店
一个写着“开始吧,谷歌Play”的按钮,如果点击它,就会引导你进入谷歌Play商店
Baidu
map