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文件优化
Dec 08 Javascript
JS生成不重复随机数组的函数代码
Jun 10 Javascript
js实现屏幕自适应局部代码分享
Jan 30 Javascript
Javascript数据结构与算法之列表详解
Mar 12 Javascript
jquery实现鼠标悬浮停止轮播特效
Aug 20 Javascript
javascript多物体运动实现方法分析
Jan 08 Javascript
Javascript基础学习笔记(菜鸟必看篇)
Jul 22 Javascript
jQuery实现简单漂亮的Nav导航菜单效果
Mar 29 jQuery
JavaScript生成简单等差数列
Nov 28 Javascript
vue中父子组件注意事项,传值及slot应用技巧
May 09 Javascript
vue3实现v-model原理详解
Oct 09 Javascript
js实现随机点名器精简版
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
PHP的FTP学习(一)
2006/10/09 PHP
PHP写的加密函数,支持私人密钥(详细介绍)
2013/06/09 PHP
Win7 64位系统下PHP连接Oracle数据库
2014/08/20 PHP
golang实现php里的serialize()和unserialize()序列和反序列方法详解
2018/10/30 PHP
Firefox div高度自适应
2009/04/28 Javascript
js 实现无缝滚动 兼容IE和FF
2009/07/15 Javascript
写js时遇到的一些小问题
2010/12/06 Javascript
查找iframe里元素的方法可传参
2013/09/11 Javascript
js中iframe调用父页面的方法
2014/10/30 Javascript
Javascript之Math对象详解
2016/06/07 Javascript
Angularjs 设置全局变量的方法总结
2016/10/20 Javascript
使用BootStrap实现标签切换原理解析
2017/03/14 Javascript
微信小程序自定义tab实现多层tab嵌套功能
2018/06/15 Javascript
vue 遮罩层阻止默认滚动事件操作
2020/07/28 Javascript
微信小程序入门之绘制时钟
2020/10/22 Javascript
[00:17]天涯墨客一技能展示
2018/08/25 DOTA
Python格式化css文件的方法
2015/03/10 Python
mac系统安装Python3初体验
2018/01/02 Python
Python爬虫框架scrapy实现downloader_middleware设置proxy代理功能示例
2018/08/04 Python
Python创建或生成列表的操作方法
2019/06/19 Python
pyqt5使用按钮进行界面的跳转方法
2019/06/19 Python
Flask框架学习笔记之使用Flask实现表单开发详解
2019/08/12 Python
python被修饰的函数消失问题解决(基于wraps函数)
2019/11/04 Python
Python 利用邮件系统完成远程控制电脑的实现(关机、重启等)
2019/11/19 Python
pygame编写音乐播放器的实现代码示例
2019/11/19 Python
pytorch动态网络以及权重共享实例
2020/01/06 Python
python基于socket函数实现端口扫描
2020/05/28 Python
分享全球十款超强HTML5开发工具
2014/05/14 HTML / CSS
英国时尚首饰品牌:Missoma
2020/06/29 全球购物
美国最大最全的亚洲购物网站:美国亚米网(Yamibuy)
2020/05/05 全球购物
数控机械专业个人的自我评价
2014/01/02 职场文书
三月学雷锋活动总结
2014/06/26 职场文书
2014年医院个人工作总结
2014/12/09 职场文书
学习保证书怎么写
2015/02/26 职场文书
社区党务工作总结2015
2015/05/19 职场文书
Python中super().__init__()测试以及理解
2021/12/06 Python