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 相关文章推荐
js form action动态修改方法
Nov 04 Javascript
JavaScript 学习笔记(十三)Dom创建表格
Jan 21 Javascript
jQuery lazyload 的重复加载错误以及修复方法
Nov 19 Javascript
终于解决了IE8不支持数组的indexOf方法
Apr 03 Javascript
自己用jQuery写了一个图片的马赛克消失效果
May 04 Javascript
AngularJS中的过滤器使用详解
Jun 16 Javascript
c#程序员对TypeScript的认识过程
Jun 19 Javascript
PHP+jQuery+Ajax+Mysql如何实现发表心情功能
Aug 06 Javascript
Angular4学习教程之DOM属性绑定详解
Jan 04 Javascript
详解javascript appendChild()的完整功能
Aug 18 Javascript
详解Vue中数组和对象更改后视图不刷新的问题
Sep 21 Javascript
vue 左滑删除功能的示例代码
Jan 28 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
PHP表单提交表单名称含有点号(.)则会被转化为下划线(_)
2011/12/14 PHP
跨浏览器PHP下载文件名中的中文乱码问题解决方法
2015/03/05 PHP
PHP实现在windows下配置sendmail并通过mail()函数发送邮件的方法
2017/06/20 PHP
深入浅析安装PhpStorm并激活的步骤详解
2020/09/17 PHP
JavaScript 事件对象的实现
2009/07/13 Javascript
Jquery实战_读书笔记2 选择器
2010/01/22 Javascript
javascript正则表达式中参数g(全局)的作用
2010/11/11 Javascript
创建公共调用 jQuery Ajax 带返回值
2012/08/01 Javascript
可以用鼠标拖动的DIV实现思路及代码
2013/10/21 Javascript
javascript中的if语句使用介绍
2013/11/20 Javascript
JavaScript cookie的设置获取删除详解
2014/02/11 Javascript
JS中getYear()和getFullYear()区别分析
2014/07/04 Javascript
jQuery使用before()和after()在元素前后添加内容的方法
2015/03/26 Javascript
JavaScript数组操作函数汇总
2016/08/05 Javascript
原生js封装的一些jquery方法(详解)
2016/09/20 Javascript
在页面中引入js的两种方法(推荐)
2017/08/29 Javascript
HTML5开发Kinect体感游戏的实例应用
2017/09/18 Javascript
原生JavaScript实现todolist功能
2018/03/02 Javascript
Angular7.2.7路由使用初体验
2019/03/01 Javascript
详解原生JS回到顶部
2019/03/25 Javascript
vue中使用v-model完成组件间的通信
2019/08/22 Javascript
Python map和reduce函数用法示例
2015/02/26 Python
python使用wxPython打开并播放wav文件的方法
2015/04/24 Python
python实现kMeans算法
2017/12/21 Python
Django 外键的使用方法详解
2019/07/19 Python
PyCharm2020.3.2安装超详细教程
2021/02/08 Python
CSS中几个与换行有关的属性简明总结
2014/04/15 HTML / CSS
微软俄罗斯官方网站:Microsoft俄罗斯
2016/09/18 全球购物
2019年Java面试必问之经典试题
2012/09/12 面试题
Python如何定义一个函数
2015/09/01 面试题
Java中会存在内存泄漏吗,请简单描述
2016/12/22 面试题
计算机专业应届毕业生自荐信
2013/09/26 职场文书
王老吉广告词
2014/03/20 职场文书
注册资产评估专业求职信
2014/07/16 职场文书
2016年秋季新学期致辞
2015/07/30 职场文书
python实现简单的井字棋
2021/05/26 Python