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对象的property和prototype是什么一种关系
Aug 06 Javascript
JavaScript 基于原型的对象(创建、调用)
Oct 16 Javascript
js中巧用cssText属性批量操作样式
Mar 13 Javascript
js+html5实现可在手机上玩的拼图游戏
Jul 17 Javascript
js实现获取当前时间是本月第几周的方法
Aug 11 Javascript
Javascript实现鼠标框选操作  不是点击选取
Apr 14 Javascript
微信小程序 ES6Promise.all批量上传文件实现代码
Apr 14 Javascript
JS创建Tag标签的方法详解
Jun 09 Javascript
vue登录注册及token验证实现代码
Dec 14 Javascript
vue :src 文件路径错误问题的解决方法
May 15 Javascript
vue实现移动端项目多行文本溢出省略
Jul 29 Javascript
vue项目查看vue版本及cli版本的实现方式
Oct 24 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将进程作为守护进程的方法
2015/03/19 PHP
PHP简单处理表单输入的特殊字符的方法
2016/02/03 PHP
浅谈PHP的exec()函数无返回值排查方法(必看)
2017/03/31 PHP
js编写trim()函数及正则表达式的运用
2013/10/24 Javascript
在Node.js中实现文件复制的方法和实例
2014/06/05 Javascript
node.js中的fs.chown方法使用说明
2014/12/16 Javascript
浅谈JavaScript的事件
2015/02/27 Javascript
jQuery实现Div拖动+键盘控制综合效果的方法
2015/03/10 Javascript
JQuery选择器、过滤器大整理
2015/05/26 Javascript
三分钟带你玩转jQuery.noConflict()
2016/02/15 Javascript
每个程序员都需要学习 JavaScript 的7个理由小结
2016/09/03 Javascript
json定义及jquery操作json的方法
2016/10/03 Javascript
jQuery图片加载显示loading效果
2016/11/04 Javascript
Vue form 表单提交+ajax异步请求+分页效果
2017/04/22 Javascript
angularjs实现天气预报功能
2020/06/16 Javascript
JS 验证码功能的三种实现方式
2018/11/26 Javascript
JS使用JSON.parse(),JSON.stringify()实现对对象的深拷贝功能分析
2019/03/06 Javascript
vue使用nprogress实现进度条
2019/12/09 Javascript
使用Vue-cli 中为单独页面设置背景图片铺满全屏
2020/07/17 Javascript
python网络编程学习笔记(五):socket的一些补充
2014/06/09 Python
使用Python编写一个在Linux下实现截图分享的脚本的教程
2015/04/24 Python
使用相同的Apache实例来运行Django和Media文件
2015/07/22 Python
python获取指定时间差的时间实例详解
2017/04/11 Python
flask入门之文件上传与邮件发送示例
2018/07/18 Python
Django 如何使用日期时间选择器规范用户的时间输入示例代码详解
2020/05/22 Python
用python给csv里的数据排序的具体代码
2020/07/17 Python
Django和Ueditor自定义存储上传文件的文件名
2021/02/25 Python
TripAdvisor越南:全球领先的旅游网站
2017/09/21 全球购物
美国伴娘礼服商店:Evening Collective
2019/10/07 全球购物
英文求职信结束语大全
2013/10/26 职场文书
给市场的环保建议书
2014/05/14 职场文书
选秀节目策划方案
2014/06/06 职场文书
离婚协议书范本样本
2014/08/19 职场文书
美容院管理规章制度
2015/08/05 职场文书
导游词之重庆渣滓洞
2020/01/08 职场文书
MySQL数据库完全卸载的方法
2022/03/03 MySQL