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检测客户端不是firefox则提示下载
Apr 07 Javascript
jquery 结合C#后台的数组对文章的关键字自动添加链接的代码
Jul 15 Javascript
js 3种归并操作的实例代码
Oct 30 Javascript
如何将网页表格内容导入excel
Feb 18 Javascript
JavaScript实现的双向跨域插件分享
Jan 31 Javascript
js实现鼠标感应向下滑动隐藏菜单的方法
Feb 20 Javascript
Function.prototype.apply()与Function.prototype.call()小结
Apr 27 Javascript
vue draggable resizable gorkys与v-chart使用与总结
Sep 05 Javascript
Vue Cli3 打包配置并自动忽略console.log语句的方法
Apr 23 Javascript
JS实现简易贪吃蛇游戏
Aug 24 Javascript
基于vue项目设置resolves.alias: '@'路径并适配webstorm
Dec 02 Vue.js
CocosCreator如何实现划过的位置显示纹理
Apr 14 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 网页过期时间的控制代码
2009/06/29 PHP
php防止伪造数据从地址栏URL提交的方法
2014/08/24 PHP
phplist及phpmailer(组合使用)通过gmail发送邮件的配置方法
2016/03/30 PHP
phpmailer简单发送邮件的方法(附phpmailer源码下载)
2016/06/13 PHP
轻松掌握php设计模式之访问者模式
2016/09/23 PHP
基于PHP实现栈数据结构和括号匹配算法示例
2017/08/10 PHP
PHP抽象类和接口用法实例详解
2019/07/20 PHP
PhpStorm 如何优雅的调试Hyperf的方法步骤
2019/11/24 PHP
jQuery 渐变下拉菜单
2009/12/15 Javascript
javascript tips提示框组件实现代码
2010/11/19 Javascript
Prototype的Class.create函数解析
2011/09/22 Javascript
类似php的js数组的in_array函数自定义方法
2013/12/27 Javascript
Javascript 按位与赋值运算符 (&amp;=)使用介绍
2014/02/04 Javascript
JavaScript中的DSL元编程介绍
2015/03/15 Javascript
javascript中innerText和innerHTML属性用法实例分析
2015/05/13 Javascript
Clipboard.js 无需Flash的JavaScript复制粘贴库
2015/10/02 Javascript
跟我学习javascript的函数和函数表达式
2015/11/16 Javascript
30分钟快速掌握Bootstrap框架
2016/05/24 Javascript
Json解析的方法小结
2016/06/22 Javascript
jQuery实现二维码扫描功能
2017/01/09 Javascript
nodejs制作爬虫实现批量下载图片
2017/05/19 NodeJs
浅谈Angular 的变化检测的方法
2018/03/01 Javascript
nodejs实现连接mongodb数据库的方法示例
2018/03/15 NodeJs
Vue实现一个无限加载列表功能
2018/11/13 Javascript
js实现多图和单图上传显示
2019/12/18 Javascript
react基本安装与测试示例
2020/04/27 Javascript
ES6新增的数组知识实例小结
2020/05/23 Javascript
python 网络爬虫初级实现代码
2016/02/27 Python
python特性语法之遍历、公共方法、引用
2018/08/08 Python
详解Python3 定义一个跨越多行的字符串的多种方法
2020/09/06 Python
纽约和芝加哥当天送花:Ode à la Rose
2019/07/05 全球购物
表彰大会主持词
2014/03/26 职场文书
杜甫草堂导游词
2015/02/03 职场文书
SqlServer: 如何更改表的文件组?(进而改变存储位置)
2021/04/05 SQL Server
Python爬取英雄联盟MSI直播间弹幕并生成词云图
2021/06/01 Python
如何利用Python实现n*n螺旋矩阵
2022/01/18 Python