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高级程序设计(第3版)学习笔记8 js函数(中)
Oct 11 Javascript
jquery ajax的success回调函数中实现按钮置灰倒计时
Nov 19 Javascript
jquery中对于批量deferred的处理方法
Jan 22 Javascript
JavaScript+canvas实现七色板效果实例
Feb 18 Javascript
jQuery插件zTree实现的基本树与节点获取操作示例
Mar 08 Javascript
微信小程序实现页面跳转传值以及获取值的方法分析
Dec 18 Javascript
详解Vue单元测试Karma+Mocha学习笔记
Jan 31 Javascript
javascript简单实现深浅拷贝过程详解
Oct 08 Javascript
Vuex实现数据增加和删除功能
Nov 11 Javascript
JavaScript实现随机点名小程序
Oct 29 Javascript
ESLint 是如何检查 .vue 文件的
Nov 30 Vue.js
Vue+Bootstrap实现简易学生管理系统
Feb 09 Vue.js
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
PHP5在Apache下的两种模式的安装
2006/09/05 PHP
PHP函数http_build_query使用详解
2014/08/20 PHP
自编函数解决pathinfo()函数处理中文问题
2014/11/03 PHP
PHP单例模式简单用法示例
2017/06/23 PHP
PHP微信网页授权的配置文件操作分析
2019/05/29 PHP
js弹出层之1:JQuery.Boxy (二)
2011/10/06 Javascript
jquery下checked取值问题的解决方法
2012/08/09 Javascript
运用JQuery的toggle实现网页加载完成自动弹窗
2014/03/18 Javascript
jquery的attr方法禁用表单元素禁用输入内容
2014/06/23 Javascript
牛叉的Jquery——Jquery与DOM对象的互相转换及DOM的三种操作
2015/10/29 Javascript
Web Uploader文件上传插件使用详解
2016/05/10 Javascript
基于JavaScript定位当前的地理位置
2017/04/11 Javascript
详解nodejs微信公众号开发——5.素材管理接口
2017/04/11 NodeJs
JS正则验证多个邮箱完整实例【邮箱用分号隔开】
2017/04/19 Javascript
原生JavaScript实现精美的淘宝轮播图效果示例【附demo源码下载】
2017/05/27 Javascript
Bootstrap Table 搜索框和查询功能
2017/11/30 Javascript
karma+webpack搭建vue单元测试环境的方法示例
2018/05/24 Javascript
Taro集成Redux快速上手的方法示例
2018/06/21 Javascript
用VueJS写一个Chrome浏览器插件的实现方法
2019/02/27 Javascript
Vue 解决路由过渡动画抖动问题(实例详解)
2020/01/05 Javascript
[07:47]DOTA2国际邀请赛采访专栏:探访Valve总部
2013/08/08 DOTA
Python实现一个简单的MySQL类
2015/01/07 Python
Python跨文件全局变量的实现方法示例
2017/12/10 Python
python批量替换页眉页脚实例代码
2018/01/22 Python
Python模块的加载讲解
2019/01/15 Python
Python使用Pandas库实现MySQL数据库的读写
2019/07/06 Python
基于python3抓取pinpoint应用信息入库
2020/01/08 Python
浅析Django 接收所有文件,前端展示文件(包括视频,文件,图片)ajax请求
2020/03/09 Python
Keras 切换后端方式(Theano和TensorFlow)
2020/06/19 Python
演讲稿开场白
2014/01/13 职场文书
文秘大学生求职信
2014/02/25 职场文书
《金色的脚印》教后反思
2014/04/23 职场文书
2014年光棍节活动策划方案(创意集锦)
2014/09/29 职场文书
辩护词格式
2015/05/22 职场文书
导游词之永济鹳雀楼
2020/01/16 职场文书
Django框架中模型的用法
2022/06/10 Python