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操作CheckBoxList实现全选/反选(在客服端完成)
Feb 02 Javascript
用jQuery实现一些导航条切换,显示隐藏的实例代码
Jun 08 Javascript
Jquery焦点图实例代码
Nov 25 Javascript
深入理解JavaScript系列(45):代码复用模式(避免篇)详解
Mar 04 Javascript
基于jQuey实现鼠标滑过变色(整行变色)
Dec 07 Javascript
AngulerJS学习之按需动态加载文件
Feb 13 Javascript
vue.js实现简单轮播图效果
Oct 10 Javascript
加载 vue 远程代码的组件实例详解
Nov 20 Javascript
详解webpack模块加载器兼打包工具
Sep 11 Javascript
vue axios数据请求get、post方法及实例详解
Sep 11 Javascript
js实现简单的日历显示效果函数示例
Nov 25 Javascript
详解node.js创建一个web服务器(Server)的详细步骤
Jan 15 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+mysql一个名片库程序
2006/10/09 PHP
php实现mysql数据库备份类
2008/03/20 PHP
PHP setcookie设置Cookie用法(及设置无效的问题)
2011/07/13 PHP
PHP 修复未正常关闭的HTML标签实现代码(支持嵌套和就近闭合)
2012/06/07 PHP
php使用curl抓取qq空间的访客信息示例
2014/02/28 PHP
Fatal error: session_start(): Failed to initialize storage module: files问题解决方法
2014/05/04 PHP
Yii基于数组和对象的Model查询技巧实例详解
2015/12/28 PHP
php cli模式下获取参数的方法
2017/05/05 PHP
php实现等比例压缩图片
2018/07/26 PHP
js静态作用域的功能。
2006/12/25 Javascript
JS控制显示隐藏兼容问题(IE6、IE7、IE8)
2010/04/01 Javascript
jQuery阻止冒泡和HTML默认操作
2010/11/17 Javascript
jquery+html5制作超酷的圆盘时钟表
2015/04/14 Javascript
jquery插件hiAlert实现网页对话框美化
2015/05/03 Javascript
jquery点击改变class并toggle的实现代码
2016/05/15 Javascript
最基础的vue.js双向绑定操作
2017/08/23 Javascript
详解vue axios中文文档
2017/09/12 Javascript
浅谈React和Redux的连接react-redux
2017/12/04 Javascript
零基础之Node.js搭建API服务器的详解
2019/03/08 Javascript
Python中urllib2模块的8个使用细节分享
2015/01/01 Python
python密码错误三次锁定(实例讲解)
2017/11/14 Python
python爬虫之线程池和进程池功能与用法详解
2018/08/02 Python
对Python3 序列解包详解
2019/02/16 Python
python写入数据到csv或xlsx文件的3种方法
2019/08/23 Python
Python代码覆盖率统计工具coverage.py用法详解
2020/11/25 Python
研究生自荐信
2013/10/09 职场文书
传播学毕业生求职信
2013/10/11 职场文书
酒店个人求职信范文
2014/01/25 职场文书
中学教师自我鉴定
2014/02/07 职场文书
公司员工检讨书
2014/02/08 职场文书
2014年乡镇植树节活动方案
2014/02/28 职场文书
QQ空间主人寄语大全
2014/04/12 职场文书
购房意向书
2014/08/30 职场文书
HTML+VUE分页实现炫酷物联网大屏功能
2021/05/27 Vue.js
Redis全局ID生成器的实现
2022/06/05 Redis
新的CSS 伪类函数 :is() 和 :where()示例详解
2022/08/05 HTML / CSS