Angular8 简单表单验证的实现示例


Posted in Javascript onJune 03, 2020

简单表单校验

傻瓜式校验

直接复制Antd中demo

<form nz-form [nzLayout]="'inline'" [formGroup]="validateForm" (ngSubmit)="submitForm()">
 <nz-form-item>
  <nz-form-control nzErrorTip="Please input your username!">
   <nz-input-group nzPrefixIcon="user">
    <input formControlName="userName" nz-input placeholder="Username" />
   </nz-input-group>
  </nz-form-control>
 </nz-form-item>
 <nz-form-item>
  <nz-form-control nzErrorTip="Please input your Password!">
   <nz-input-group nzPrefixIcon="lock">
    <input formControlName="password" nz-input type="password" placeholder="Password" />
   </nz-input-group>
  </nz-form-control>
 </nz-form-item>
 <nz-form-item>
  <nz-form-control>
   <button nz-button nzType="primary" [disabled]="!validateForm.valid">Log in</button>
  </nz-form-control>
 </nz-form-item>
</form>
validateForm!: FormGroup;

 submitForm(): void {
  for (const i in this.validateForm.controls) {
   this.validateForm.controls[i].markAsDirty();
   this.validateForm.controls[i].updateValueAndValidity();
  }
 }

 constructor(private fb: FormBuilder) {}

 ngOnInit(): void {
  this.validateForm = this.fb.group({
   userName: [null, [Validators.required]],
   password: [null, [Validators.required]],
   remember: [true]
  });
 }

此类表单校验较为单一,或者要求比较低,通常即为required校验,错误信息提示也多为固定不变。

Angular8 简单表单验证的实现示例

智能化校验

表单一旦开始有具体的细节校验或者复杂的业务参杂,校验提示必须准确、清晰。
userName为例,除了为必填项,必然需要符合某种格式,亦或是指定邮箱格式等,那么校验必须同时反映出错误类型,本例假设用户名有长度要求进行演示。

<nz-form-control [nzErrorTip]="getErrTipByField('userName')">
   <nz-input-group nzPrefixIcon="user">
    <input formControlName="userName" nz-input placeholder="Username" />
   </nz-input-group>
  </nz-form-control>
export class SimpleFormComponent implements OnInit {
 validateForm: FormGroup;
 errMessageMap = {};

 constructor(
  private fb: FormBuilder
 ) { }

 ngOnInit() {
  this.errMessageMap = {
   userName: {
    required: 'please input your name!',
    minlength: 'please input at least least 5 character'
   },
   password: {
    required: 'please input your password!'
   }
  };
  this.validateForm = this.fb.group({
   userName: [null, [Validators.required, Validators.minLength(5)]],
   password: [null, [Validators.required]],
   remember: [true]
  }, { updateOn: 'change' });
 }
 submitForm(): void {
  if (this.validateForm.controls) {
   for (const i in this.validateForm.controls) {
    if (this.validateForm.controls[i]) {
     this.validateForm.controls[i].markAsDirty();
     this.validateForm.controls[i].updateValueAndValidity();
    }
   }
  }
 }
 getErrTipByField(fieldName) {
  const errors = this.validateForm.get(fieldName).errors;
  let errMsg = '';
  for (const key in errors) {
   if (errors.hasOwnProperty(key)) {
    errMsg += this.errMessageMap[fieldName][key];
   }
  }
  return errMsg;
 }

}

构建出一个数据对象,以满足不同字段下不同错误类型的错误提示,根据业务需求,决定是否显示全部错误信息或者按照业务优先级显示。

Angular8 简单表单验证的实现示例

其它细节

表单校验时机可以设置,默认为change,可选blursubmit

表单验证正确的,想要提示勾号可以添加属性 nzHasFeedback

Angular8 简单表单验证的实现示例

submit中那段代码是重新对表单进行验证了,一般验证中是不需要的,动态表单验证后续结合自定义表单服务进行演示。

到此这篇关于Angular8 简单表单验证的实现示例的文章就介绍到这了,更多相关Angular8 表单验证内容请搜索三水点靠木以前的文章或继续浏览下面的相关文章希望大家以后多多支持三水点靠木!

Javascript 相关文章推荐
在JavaScript中typeof的用途介绍
Apr 11 Javascript
jQuery实现随意改变div任意属性的名称和值(部分原生js实现)
May 28 Javascript
基于jquery实现发送文章到手机的代码
Dec 26 Javascript
JavaScript中的对象的extensible属性介绍
Dec 30 Javascript
基于JavaScript实现网页倒计时自动跳转代码
Dec 28 Javascript
node.js实现快速截图
Aug 27 Javascript
js对象实例详解(JavaScript对象深度剖析,深度理解js对象)
Sep 21 Javascript
详解vue中点击空白处隐藏div的实现(用指令实现)
Apr 19 Javascript
JavaScript静态作用域和动态作用域实例详解
Jun 17 Javascript
解决LayUI数据表格复选框不居中显示的问题
Sep 25 Javascript
Vue混入mixins滚动触底的方法
Nov 22 Javascript
vue实现图片上传到后台
Jun 29 Javascript
JS实现前端动态分页码代码实例
Jun 02 #Javascript
在Vue中创建可重用的 Transition的方法
Jun 02 #Javascript
jQuery+Ajax+js实现请求json格式数据并渲染到html页面操作示例
Jun 02 #jQuery
2020淘宝618理想生活列车自动领喵币js脚本的代码
Jun 02 #Javascript
JavaScript实现手机号码 3-4-4格式并控制新增和删除时光标的位置
Jun 02 #Javascript
2020京东618叠蛋糕js脚本(亲测好用)
Jun 02 #Javascript
vue项目在webpack2实现移动端字体自适配功能
Jun 02 #Javascript
You might like
php4的session功能评述(二)
2006/10/09 PHP
ThinkPHP模板替换与系统常量及应用实例教程
2014/08/22 PHP
PHP面向对象编程之深入理解方法重载与方法覆盖(多态)
2015/12/24 PHP
利用PHPExcel实现Excel文件的写入和读取
2017/04/26 PHP
thinkphp 5框架实现登陆,登出及session登陆状态检测功能示例
2019/10/10 PHP
PHP设计模式入门之状态模式原理与实现方法分析
2020/04/26 PHP
浅析showModalDialog数据缓存问题(用禁止浏览器缓存解决)
2013/07/09 Javascript
JavaScript中的迭代器和生成器详解
2014/10/29 Javascript
Javascript 拖拽雏形(逐行分析代码,让你轻松了拖拽的原理)
2015/01/23 Javascript
JS实现先显示大图后自动收起显示小图的广告代码
2015/09/04 Javascript
javascript作用域链(Scope Chain)用法实例解析
2015/11/30 Javascript
AngualrJS中每次$http请求时的一个遮罩层Directive
2016/01/26 Javascript
JavaScript SHA1加密算法实现详细代码
2016/10/06 Javascript
JS字符串统计操作示例【遍历,截取,输出,计算】
2017/03/27 Javascript
微信小程序页面间值传递的两种方法
2018/11/26 Javascript
如何解决webpack-dev-server代理常切换问题
2019/01/09 Javascript
vue和better-scroll实现列表左右联动效果详解
2019/04/29 Javascript
微信小程序位置授权处理方法
2019/06/13 Javascript
JavaScript实现拖拽功能
2020/02/11 Javascript
[06:04]DOTA2国际邀请赛纪录片:Just For LGD
2013/08/11 DOTA
[03:11]TI9战队档案 - Alliance
2019/08/20 DOTA
浅析Python编写函数装饰器
2016/03/18 Python
老生常谈Python序列化和反序列化
2017/06/28 Python
python实现m3u8格式转换为mp4视频格式
2018/02/28 Python
python 除法保留两位小数点的方法
2018/07/16 Python
python使用插值法画出平滑曲线
2018/12/15 Python
python实践项目之监控当前联网状态详情
2019/05/23 Python
python实现图片横向和纵向拼接
2020/03/05 Python
Python3实现打印任意宽度的菱形代码
2020/04/12 Python
使用 Python 读取电子表格中的数据实例详解
2020/04/17 Python
Python中的全局变量如何理解
2020/06/04 Python
python实现自动清理重复文件
2020/08/24 Python
pytorch加载语音类自定义数据集的方法教程
2020/11/10 Python
仿酷狗html5手机音乐播放器主要部分代码
2013/05/15 HTML / CSS
linux面试题参考答案(6)
2016/06/23 面试题
民政局副局长民主生活会个人对照检查材料
2014/09/19 职场文书