一、跨字段验证

1、新增验证器

import { AbstractControl, ValidationErrors, ValidatorFn } from '@angular/forms';

export const placeRevealedValidator: ValidatorFn = (control: AbstractControl): ValidationErrors | null => {
const fromPlace = control.get('fromPlace');
const toPlace = control.get('toPlace');
return fromPlace && toPlace && fromPlace.value === toPlace.value ? { 'placeRevealed': true } : null;
};

2、给 FormGroup 添加验证器

 initForm() {
this.validateForm = this.fb.group(
{
Id: [0, [Validators.required]],
fromPlace: [null, [Validators.required]],
toPlace: [null, [Validators.required]],
isValid: ['Y', [Validators.required]],
language_Cd: ['zh-tw', [Validators.required]],
},
{ validators: placeRevealedValidator }
);
}
get fromPlace() {
return this.validateForm.get('fromPlace') as any;
}
get toPlace() {
return this.validateForm.get('toPlace') as any;
}

3、页面判断(因为交叉验证设置在FormBuilder上,所以页面验证时使用FormBuilder值validateForm )

<nz-form-control>
<nz-select nzAllowClear formControlName="toPlace"
class="inputs">
<nz-option *ngFor="let item of place" [nzLabel]="item.routePlace" [nzValue]="item.routePlace">
</nz-option>
</nz-select>
<div *ngIf="validateForm.errors?.['placeRevealed'] &&fromPlace.dirty &&toPlace.dirty"
class="alert alert-danger">
出發地和目的地不能相同
</div>
</nz-form-control>

一、异步验证

1、新增验证器

import { AbstractControl,  } from "@angular/forms";
import { catchError, map, of } from "rxjs";
import { DpaService } from "src/app/services/apis/dpa.service"; export class EmpIdRevealedValidators { static EmpIdValidator(dpaService: DpaService) {
return (control: AbstractControl) => {
if (!control.valueChanges) {
return of(null);
} else {
return dpaService.GetUserByEmpId(control.value)
.pipe(
map((isTaken: any) =>{
return (isTaken.length==0 ? { 'empIdRevealed': true } : null)
} ),
catchError(() => of(null))
);
}
}
}
}

2、给 FormGroup 添加验证器

 initForm() {
this.validateForm = this.fb.group({
process: [this.process[0], [Validators.required]],
bo: [null, [Validators.required]],
site: [null, [Validators.required]],
emplId:[null,{
validators: [Validators.required],
asyncValidators:EmpIdRevealedValidators.EmpIdValidator(this.dpaService),
updateOn: 'blur' //鼠标移开后验证,还有change和submit
}],
isValid: ['Y', [Validators.required]],
});
}
get emplId() {
return this.validateForm.get('emplId') as any;
}

3、页面判断(因为交叉验证设置在FormControl上,所以页面验证时使用FormControl值emplId)

<nz-form-item>
<nz-form-label>工號</nz-form-label>
<nz-form-control>
<input nz-input [readonly]="this.apiAction==='Update'" formControlName="emplId" class="inputs">
<div *ngIf="emplId.errors?.['empIdRevealed']&&emplId.dirty "
class="alert alert-danger">
工號不存在
</div>
</nz-form-control>
</nz-form-item>

最新文章

  1. CSS中使用text-transform实现首字母大写
  2. 商业信息管理系统 Bizagi 建模pattern
  3. WebApi 学习随笔(一)
  4. Atitit Atitit 图像处理之&#160;&#160;Oilpaint油画滤镜 水彩画 源码实现
  5. Codeforces Beta Round #3
  6. B’QConf(北京软件质量大会)记
  7. sqoop导出工具
  8. .NET Entity Framework入门简介及简单操作
  9. 安装app到Simulator
  10. CoreAnimation4-隐式动画和显式动画
  11. Parallel.Foreach的全部知识要点【转】
  12. WARNING: REMOTE HOST IDENTIFICATION HAS CHANGED!错误
  13. 推荐国内外优秀+免费CDN加速站点及公共cdn加速库
  14. 在mysql数据库中关于日期时间字段的处理
  15. OS X升级到10.10使用后pod故障解决方案出现
  16. [Algorithm] 如何正确撸&lt;算法导论&gt;CLRS
  17. BigDecimal的引入和概述
  18. promise封装的ajax
  19. es6 import export 引入导出变量方式
  20. MicroMsg.SDK.WXApiImplV10: register app failed for wechat app signature check failed

热门文章

  1. Linux服务器硬件及RAID配置
  2. Vue08 数据代理
  3. Node版本管理工具 - Nvm的下载、安装配置与使用
  4. Mockito单元测试 初试
  5. shrio
  6. uniapp 分享 绘制海报
  7. WinUI 剪裁发布中的一个小坑
  8. Java开发环境配置(win7-64bit)
  9. 爬取精美壁纸5w张,爱了爱了
  10. 跳板攻击之:lcx 端口转发