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 相关文章推荐
图像替换新技术 状态域方法
Jan 28 Javascript
jquery得到font-size属性值实现代码
Sep 30 Javascript
红米手机抢购的js代码
Mar 10 Javascript
浅谈Javascript数组索引
Jul 29 Javascript
JavaScript驾驭网页-DOM
Mar 24 Javascript
移动端点击态处理的三种实现方式
Jan 12 Javascript
bootstrap datetimepicker日期插件使用方法
Jan 13 Javascript
cocos creator Touch事件应用(触控选择多个子节点的实例)
Sep 10 Javascript
React 组件转 Vue 组件的命令写法
Feb 28 Javascript
JS实现百度网盘任意文件强制下载功能
Aug 31 Javascript
Angular(5.2-&gt;6.1)升级小结
Dec 27 Javascript
javascript实现贪吃蛇小练习
Jul 05 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
跟我学小偷程序之成功偷取首页(第三天)
2006/10/09 PHP
用PHP读取IMAP邮件
2006/10/09 PHP
PHP+MYSQL的文章管理系统(一)
2006/10/09 PHP
PHP 常见郁闷问题答解
2006/11/25 PHP
php mysql索引问题
2008/06/07 PHP
用PHP实现Ftp用户的在线管理
2012/02/16 PHP
CodeIgniter生成网站sitemap地图的方法
2013/11/13 PHP
thinkphp验证码显示不出来的解决方法
2014/03/29 PHP
php使用CURL伪造IP和来源实例详解
2015/01/15 PHP
php实现的生成排列算法示例
2019/07/25 PHP
超强的IE背景图片闪烁(抖动)的解决办法
2007/09/09 Javascript
Jquery Ajax学习实例3 向WebService发出请求,调用方法返回数据
2010/03/16 Javascript
javascript 常用功能总结
2012/03/18 Javascript
jquery入门必备的基本认识及实例(整理)
2013/06/24 Javascript
纯JavaScript实现HTML5 Canvas六种特效滤镜示例
2013/06/28 Javascript
jQuery打字效果实现方法(附demo源码下载)
2015/12/18 Javascript
JavaScript中的事件委托及好处
2016/07/12 Javascript
JS遍历页面所有对象属性及实现方法
2016/08/01 Javascript
webpack 4.0.0-beta.0版本新特性介绍
2018/02/10 Javascript
jQuery实现上下滚动公告栏详细代码
2018/11/21 jQuery
Node.js学习教程之Module模块
2019/09/03 Javascript
Vue打包后访问静态资源路径问题
2019/11/08 Javascript
Vue强制组件重新渲染的方法讨论
2020/02/03 Javascript
JS前端面试必备——基本排序算法原理与实现方法详解【插入/选择/归并/冒泡/快速排序】
2020/02/24 Javascript
JavaScript面向对象核心知识与概念归纳整理
2020/05/09 Javascript
js实现有趣的倒计时效果
2021/01/19 Javascript
[01:11]辉夜杯战队访谈宣传片—CDEC.Y
2015/12/26 DOTA
tensorflow学习笔记之简单的神经网络训练和测试
2018/04/15 Python
在Mac下使用python实现简单的目录树展示方法
2018/11/01 Python
Django 后台带有字典的列表数据与页面js交互实例
2020/04/03 Python
英国电子产品购物网站:TobyDeals
2018/07/30 全球购物
Michael Kors加拿大官网:购买设计师手袋、手表、鞋子、服装等
2019/03/16 全球购物
大学生实习期自我评价范文
2013/10/03 职场文书
副总经理工作职责
2013/11/28 职场文书
数控专业推荐信范文
2013/12/02 职场文书
房产分割协议书范文
2014/11/21 职场文书