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 相关文章推荐
jQuery 点击图片跳转上一张或下一张功能的实现代码
Mar 12 Javascript
PHP开发者必须掌握的6个关键字
Apr 14 Javascript
js中string和number类型互转换技巧(分享)
Nov 28 Javascript
关于不同页面之间实现参数传递的几种方式讨论
Feb 13 Javascript
Webpack+Vue如何导入Jquery和Jquery的第三方插件
Feb 20 Javascript
微信小程序 setData使用方法及常用错误解决办法
May 11 Javascript
JavaScript闭包_动力节点Java学院整理
Jun 27 Javascript
js原生代码实现轮播图的实例讲解
Jul 28 Javascript
Vue组件Draggable实现拖拽功能
Dec 01 Javascript
在Vue项目中用fullcalendar制作日程表的示例代码
Aug 04 Javascript
这样回答继承可能面试官更满意
Dec 10 Javascript
微信小程序缓存支持二次开发封装实现解析
Dec 16 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构造函数实例讲解
2013/11/13 PHP
php fsockopen解决办法 php实现多线程
2014/01/20 PHP
PHP5.6读写excel表格文件操作示例
2019/02/26 PHP
JavaScript 题型问答有答案参考
2010/02/17 Javascript
jquery动画3.创建一个带遮罩效果的图片走廊
2012/08/24 Javascript
js获取元素到文档区域document的(横向、纵向)坐标的两种方法
2013/05/17 Javascript
AngularJS实现表单验证
2015/01/28 Javascript
javascript实现根据3原色制作颜色选择器的方法
2015/07/17 Javascript
js实现根据身份证号自动生成出生日期
2015/12/15 Javascript
JS常见疑难点分析之match,charAt,charCodeAt,map,search用法分析
2016/12/25 Javascript
JS实现搜索框文字可删除功能
2016/12/28 Javascript
vue音乐播放器插件vue-aplayer的配置及其使用实例详解
2017/07/10 Javascript
详解cordova打包成webapp的方法
2017/10/18 Javascript
使用vue-router与v-if实现tab切换遇到的问题及解决方法
2018/09/07 Javascript
浅谈redux, koa, express 中间件实现对比解析
2019/05/23 Javascript
[27:02]2014 DOTA2国际邀请赛中国区预选赛 5 23 CIS VS LGD第三场
2014/05/24 DOTA
Win7上搭建Cocos2d-x 3.1.1开发环境
2014/07/03 Python
python sys,os,time模块的使用(包括时间格式的各种转换)
2018/04/27 Python
ubuntu17.4下为python和python3装上pip的方法
2018/06/12 Python
python使用Plotly绘图工具绘制水平条形图
2020/03/25 Python
python 用所有标点符号分隔句子的示例
2019/07/15 Python
关于Python中的向量相加和numpy中的向量相加效率对比
2019/08/26 Python
python游戏开发的五个案例分享
2020/03/09 Python
浅谈keras中自定义二分类任务评价指标metrics的方法以及代码
2020/06/11 Python
如何更换python默认编辑器的背景色
2020/08/10 Python
Python压缩模块zipfile实现原理及用法解析
2020/08/14 Python
Python3+RIDE+RobotFramework自动化测试框架搭建过程详解
2020/09/23 Python
公司面试感谢信
2014/02/01 职场文书
清明节网上祭英烈活动总结
2014/04/30 职场文书
团日活动总结书格式
2014/05/08 职场文书
社区端午节活动总结
2015/02/11 职场文书
企业工会工作总结2015
2015/05/13 职场文书
2016年社会主义核心价值观心得体会
2016/01/21 职场文书
《生物入侵者》教学反思
2016/02/16 职场文书
人为什么会“幸灾乐祸”?
2019/08/06 职场文书
高并发下Redis如何保持数据一致性(避免读后写)
2022/03/18 Redis