angular - 角反应形式检查现有数字
问题描述
我在我的 Angular 应用程序中有一个表,其中存储了一些数据(用户、电子邮件等),我可以添加新用户,并且在我的表单中有一个输入字段,我可以在其中输入重要性数字(1、2、3等等)当然每个数字应该只有一个。如果键入的数字已存在于我的数据库中,我想显示一条错误消息。有没有办法使用验证器来检查它?
解决方案
您应该添加一个自定义异步验证器。
以下代码创建了验证器类 CheckIfNumberExistsValidator,它实现了 AsyncValidator 接口。
@Injectable({ providedIn: 'root' })
export class CheckIfNumberExistsValidator implements AsyncValidator {
constructor(private numbersService: NumbersService) {}
validate(
ctrl: AbstractControl
): Promise<ValidationErrors | null> | Observable<ValidationErrors | null> {
return this.numbersService.isNumberTaken(ctrl.value).pipe(
map(isTaken => (isTaken ? { uniqueNumber: true } : null)),
catchError(() => of(null))
);
}
}
您的表单应如下所示:
this.yourForm = new FormGroup({
number: new FormControl(0, {
asyncValidators: [this.CheckIfNumberExistsValidator.validate.bind(this.CheckIfNumberExistsValidator )],
updateOn: 'blur' // You can delay updating the form validity
}),
});
NumbersService将负责向数字数据库发出 HTTP 请求。
如果表单有效,此方法返回 null,否则返回 ValidationErrors。
注意:不要忘记注入CheckIfNumberExistsValidator
有关更多信息,请查看:https ://angular.io/guide/form-validation#implementing-a-custom-async-validator
推荐阅读
- flutter - 如何从 Flutter 将亚洲语言打印到热敏打印机?
- android - 使用 WSO2 作为移动应用程序的 API 网关时,如何安全地处理用户密钥和秘密
- html - CSS 一起使用过滤器和 z-index 属性
- node.js - 如何解决 Geojson 到 shapefile 的转换错误?
- python-3.x - 我一直在...中找不到'__main__'模块我正在尝试以崇高的文本运行代码,但这一直在出现
- javascript - 无法在 node.js 中显示带有 EJS 文件的图像
- node.js - 如何删除作为依赖项安装的 Node.js 包?
- javascript - 如何在 Angular 6 中保护会话和 cookie?
- powershell - 隐藏源脚本 PowerShell GUI
- excel - 提取两个给定日期之间的数据