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 相关文章推荐
对setInterval在火狐和chrome切换标签产生奇怪的效果之探索,与解决方案!
Oct 29 Javascript
Jquery封装tab自动切换效果的具体实现
Jul 13 Javascript
jQuery计算textarea中文字数(剩余个数)的小程序
Nov 28 Javascript
js判断元素是否隐藏的方法
Jun 09 Javascript
很不错的两款Bootstrap Icon图标选择组件
Jan 28 Javascript
浅谈js函数中的实例对象、类对象、局部变量(局部函数)
Nov 20 Javascript
angularjs下拉框空白的解决办法
Jun 20 Javascript
JS实现匀加速与匀减速运动的方法示例
Sep 04 Javascript
vue 项目如何引入微信sdk接口的方法
Dec 18 Javascript
JavaScript实现页面中录音功能的方法
Jun 04 Javascript
BootStrap前端框架使用方法详解
Feb 26 Javascript
vue监听浏览器原生返回按钮,进行路由转跳操作
Sep 09 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 反射机制实现动态代理的代码
2008/10/22 PHP
PHP实现的sqlite数据库连接类
2014/12/12 PHP
Codeigniter实现发送带附件的邮件
2015/03/19 PHP
PHP+HTML+JavaScript+Css实现简单爬虫开发
2016/03/28 PHP
php连接sftp的作用以及实例代码
2019/09/23 PHP
CL vs ForZe BO5 第五场 2.13
2021/03/10 DOTA
再次更新!MSClass (Class Of Marquee Scroll通用不间断滚动JS封装类 Ver 1.6)
2007/02/05 Javascript
Dom加载让图片加载完再执行的脚本代码
2008/05/15 Javascript
使用angular写一个hello world
2015/01/23 Javascript
javascript封装的sqlite操作类实例
2015/07/17 Javascript
canvas实现钟表效果
2017/02/13 Javascript
jQuery实现元素的插入
2017/02/27 Javascript
jquery实现的table排序功能示例
2017/03/10 Javascript
基于vue.js实现侧边菜单栏
2017/03/20 Javascript
基于vue.js路由参数的实例讲解——简单易懂
2017/09/07 Javascript
微信小程序wx.request拦截器使用详解
2019/07/09 Javascript
layui实现数据表格table分页功能(ajax异步)
2019/07/27 Javascript
python2.7+selenium2实现淘宝滑块自动认证功能
2018/02/24 Python
Python向MySQL批量插数据的实例讲解
2018/03/31 Python
Python网络编程之TCP套接字简单用法示例
2018/04/09 Python
详解Python安装tesserocr遇到的各种问题及解决办法
2019/03/07 Python
[机器视觉]使用python自动识别验证码详解
2019/05/16 Python
用python解压分析jar包实例
2020/01/16 Python
安装多个版本的TensorFlow的方法步骤
2020/04/21 Python
python 实现图片修复(可用于去水印)
2020/11/19 Python
Numpy中的数组搜索中np.where方法详细介绍
2021/01/08 Python
1688平价精选商城:阿里集团旗下,工厂出厂价格直销
2017/04/24 全球购物
路德维希•贝克(LUDWIG BECK)中文官网:德国大型美妆百货
2020/09/19 全球购物
一道Delphi面试题
2016/10/28 面试题
心得体会怎么写
2013/12/30 职场文书
社区八一活动方案
2014/02/03 职场文书
十八大感想感言
2014/02/10 职场文书
农村婚礼主持词
2014/03/13 职场文书
一份关于丢失公司财物的检讨书
2014/09/19 职场文书
2014年团支书工作总结
2014/11/14 职场文书
员工辞职信怎么写
2015/02/27 职场文书