关于angular2的异步验证器的实现
时间:2020-05-29
本文章向大家介绍关于angular2的异步验证器的实现,主要包括关于angular2的异步验证器的实现使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
在实际开发需求中可能会遇到对表单某一字段通过请求后端接口的方式来实现验证,angular异步表单验证如下
下面代码以对表单roleName字段进行是否重复校验为例,当用户输入roleName且roleName input框失去焦点后想后端发起请求进行校验操作
component.ts
// 表单控件,update: 'blur'控制失去焦点时才发送请求,减少发送请求数量(update属性有三种情况,详情参见官网)
this.fm = this.fb.group({
roleName: [null, { validators: Validators.required, asyncValidators: this.roleNameValidator.bind(this), updateOn: 'blur' }] // 对于异步请求函数roleNameValidator没有使用箭头函数就会在成丢失this从而报undefined错误,可以在这儿绑定this
});
roleNameValidator(control: FormControl): Promise<ValidationErrors | null> | Observable<ValidationErrors | null> { // roleNmae repeat 异步校验
// 异步表单验证,验证name是否重复
const pagepram = {
page: 0,
size: this.xTotalCount ? this.xTotalCount : 999
};
const searchData = {
id: null,
name: control.value,
refId: null,
description: null,
obsolete: 0,
createdDateFrom: '',
createdDateTo: '',
generalSearch: null
};
return this.userMgtService.getRoleByQuery(searchData, pagepram).pipe( // 发送请求操作
map(res => {
console.log(res);
const r: any = this.detailModalAction === 'update' && this.updateRoleNameVlue === control.value ? [] : res.body;
const isNameRepeat = r.some(item => item.roleName === control.value);
if (isNameRepeat) {
return { isUsed: true };
} else {
return null;
}
}),
catchError(() => of(null))
);
}
component.html
<nz-form-item nzFlex>
<nz-form-label nzRequired>{{ roleModalList.RoleName | translate }}</nz-form-label>
<!--<span class="colonStyle">:</span>-->
<nz-form-control nzHasFeedback>
<input required class="invalid" [disabled]="isDisabled" autocomplete="off" maxlength="50" formControlName="roleName" nz-input nzSize="default" [(ngModel)]="roleName" name="roleName">
<nz-form-explain *ngIf="fm.get('roleName')?.dirty && fm.get('roleName')?.errors">
<ng-container *ngIf="fm.get('roleName').hasError('required')">
{{ roleModalList.verification_Role_Name | translate }}
</ng-container>
<ng-container *ngIf="fm.get('roleName').hasError('isUsed')">
{{ roleModalList.verification_Role_Name_Repeat | translate }}
</ng-container>
<!--<ng-container *ngIf="fm.get('roleName').hasError('isUsed')">-->
<!--{{ item.verification_User_Names | translate }}-->
<!--</ng-container>-->
</nz-form-explain>
</nz-form-control>
</nz-form-item>
原文地址:https://www.cnblogs.com/yuanchao-blog/p/12987471.html
- Tarjan--LCA算法的个人理解即模板
- spark sql编程之实现合并Parquet格式的DataFrame的schema
- Oracle压缩黑科技(一)—基础表压缩
- 12 条用于 Linux 的 MySQL/MariaDB 安全最佳实践
- hdu----(4545)魔法串(LCS)
- Oracle压缩黑科技(二)—压缩数据的修改
- 在Pivotal Web Service上发布Spring Boot应用
- hdu---(1325)Is It A Tree?(并查集)
- spark2 sql编程样例:sql操作
- hdu----(1599)最大子矩阵(几何/dp)
- Go语言简单的TCP编程
- hdu---(1054)Strategic Game(最小覆盖边)
- Swagger Starter 1.4.0发布:新增swagger功能开源与全局参数的配置。
- Go语言语法汇总
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- laravel框架邮箱认证实现方法详解
- 使用Git实现Laravel项目的自动化部署
- php传值和传引用的区别点总结
- php pdo连接数据库操作示例
- 关于Laravel参数验证的一些疑与惑
- PHP cookie与session会话基本用法实例分析
- Laravel 微信小程序后端实现用户登录的示例代码
- 使用PHP开发留言板功能
- PHP的new static和new self的区别与使用
- php时间戳转换代码详解
- thinkPHP和onethink微信支付插件分享
- PHP各种常见经典算法总结【排序、查找、翻转等】
- php字符串截取函数mb_substr用法实例分析
- PHP利用DWZ.CN服务生成短网址
- php精度计算的问题解析