Angular 表单验证类库 ngx-validator 1.0 正式发布
背景介绍
之前写了一篇 《如何优雅的使用 Angular 表单验证》,结尾处介绍了统一验证反馈的类库 ngx-validator ,由于这段时间一直在新模块做微前端以及相关业务组件库,工具等开发,一直拖到现在,目前正式版 1.0 终于可以发布了。
可能有些人没有阅读过那篇博客,我这里简单介绍下 ngx-validator 主要的功能。
- 统一验证规则和错误反馈策略,通过响应式(配置的方式)设置每个元素对应每个验证器的错误提示文案以及统一错误信息反馈,避免手动写重复的模版实现错误提示,让开发人员专心写业务即可;
- 扩展一些 Angular 本身没有提供验证器和模版驱动的验证指令,比如 ngxUniqueCheck 、 ngxMax 、 ngxMin ;
- 支持模版驱动和响应式驱动表单的验证。
从上次 0.0.1 版本到 1.0.0 正式发布新增了的功能有:
- 新增了 validateOn 支持 submit 和 blur 光标移走验证,之前只有点击按钮提交才会验证
- 对响应式表单支持的完善;
- 测试和 Demo 的完善;
- 重构了代码,添加了自动生成 changelog 和 husky 钩子做 commit message 规范检查和自动格式化(这些和库的功能无关,与开发者有关)
使用方式
如果你不想听我废话,可以直接看 示例 ,其中包括模版驱动和响应式驱动表单实现验证的全部代码。

安装
在你的项目中执行命令 npm install @why520crazy/ngx-validator --save 进行模块的安装
引入模块
在启动模块 AppModule 中直接引入 NgxValidatorModule ,当然引入的时候可以通过 NgxValidatorModule.forRoot 进行一些全局参数的配置,配置包含全局的验证错误信息,错误反馈方式,目前反馈方式支持 boostrap4 的表单错误样式和 noop(什么都不提示),当然你可以扩展自己的错误反馈策略。
import { NgxValidatorModule, ValidationFeedbackStrategyBuilder } from '@why520crazy/ngx-validator';
@NgModule({
imports: [
CommonModule,
NgxValidatorModule.forRoot({
validationFeedbackStrategy: ValidationFeedbackStrategyBuilder.bootstrap(),
validationMessages: {
username: {
required: 'Username is required.',
pattern: 'Incorrect username format.'
}
}
})
]
})
class AppModule {}
模版驱动表单验证
在 form 表单元素上添加 ngxFormValidator 指令,配置的参数和全局配置的参数类似,此处单独配置只会对当前 Form 有效。
由于 ngxFormValidator 采用的验证器,以及元素是否验证通过完全读取的是 Angular 表单提供的信息,所以模版驱动表单必须遵循 Angular 表单的一些规则:
- 表单元素必须设置一个 name,这个 name 会和 ngForm controls 中的对象对应;
- 表单元素必须设置 ngModel ,当提交表单时通过 ngModel 这只的变量获取用户输入的数据;
- 验证器直接设置到表单元素上,比如 Angular 内置的 required 、 email 、 pattern 、 maxlength 、 minlength 以及 ngx-validator 类库提供的 ngxMax 、 ngxMin 、 ngxUniqueCheck 。
最后在提交按钮上绑定 ngxFormSubmit 事件,当按钮点击后会触发表单验证,验证不通过会根据每个表单元素配置的提示信息反馈错误,如果使用的默认的 bootstrap4 的反馈策略,会在表单元素上加 is-invalid class 样式,同时在表单元素后追加 {相关的错误提示信息}
Email address
Submit


响应式驱动表单验证
响应式表单验证和模版驱动类似,区别就是不需要给每个元素加 ngModel 和 验证器,直接使用 formControlName 指令指定名称, 然后在组件中通过 FormBuilder 生成 group 即可,基本没有特殊配置,参考 Angular 官网的响应式表单验证示例即可。
APIs
ngxFormValidator 表单配置
| 属性名 | 类型 | 备注 | |
|---|---|---|---|
| validationMessages | {[controlName: string]: {[validatorErrorKey: string]: string}} | 表单元素验证规则 | |
| validationFeedbackStrategy | IValidationFeedbackStrategy | 没有配置,以全局配置的验证反馈策略为主 | |
| validateOn | 'submit' \ | 'blur' | 没有配置,以全局配置的 validateOn 为主 |
validatorConfig: NgxValidatorConfig = {
validationMessages: {
username: {
required: '用户名不能为空',
pattern: '用户名格式不正确,以字母,数字,下划线组成,首字母不能为数字,必须是2-20个字符',
ngxUniqueCheck: '输入的用户名已经存在,请重新输入'
}
},
validateOn: 'submit'
};
全局配置
全局配置可以通过引入 NgxValidatorModule.forRoot(config) 进行设置,也可以在运行时注入 NgxValidatorLoader 服务进行配置
| 属性名 | 类型 | 备注 | |
|---|---|---|---|
| validationMessages | {[controlName: string]: {[validatorErrorKey: string]: string}} | 表单元素验证规则 | |
| validationFeedbackStrategy | IValidationFeedbackStrategy | 没有配置,以全局配置的验证反馈策略为主 | |
| globalValidationMessages | {[validatorErrorKey: string]: string} | 每个验证器全局的默认验证规则 | |
| validateOn | 'submit' \ | 'blur' | 触发验证,是提交触发验证还是光标移走触发验证 |
globalValidationMessages 默认规则如下,当某个表单元素比如 username 在表单和全局的 validationMessages 都没有被设置,验证不通过会直接显示 globalValidationMessages 中的 required 提示信息
{
required: '该选项不能为空',
maxlength: '该选项输入值长度不能大于{requiredLength}',
minlength: '该选项输入值长度不能小于{requiredLength}',
ngxUniqueCheck: '输入值已经存在,请重新输入',
email: '输入邮件的格式不正确',
repeat: '两次输入不一致',
pattern: '该选项输入格式不正确',
number: '必须输入数字',
url: '输入URL格式不正确',
max: '该选项输入值不能大于{max}',
min: '该选项输入值不能小于{min}'
};
Worktile官网:www.worktile.com
本文作者:徐海峰
文章首发于「Worktile官方博客」,转载请注明来源。
Angular 表单验证类库 ngx-validator 1.0 正式发布的更多相关文章
- [php基础]PHP Form表单验证:PHP form validator使用说明
在PHP网站开发建设中,用户注册.留言是必不可少的功能,用户提交的信息数据都是通过Form表单提交,为了保证数据的完整性.安全性,PHP Form表单验证是过滤数据的首要环节,PHP对表单提交数据的验 ...
- 如何优雅的使用 Angular 表单验证
随便说说,这一节可以跳过 去年参加 ngChine 2018 杭州开发者大会的时候记得有人问我: Worktile 是什么时候开始使用 Angular 的,我说是今年(2018年) 3 月份开始在新模 ...
- Angular表单验证
novalidate 去掉html5自带的验证 ng-minlength 规定输入文本的最小长度 ng-maxlength 规定输入文本的最大长度 ng-submit 接收一个方法名 ...
- 简单的angular表单验证指令
<html ng-app="myApp"> <head> <meta charset="UTF-8"> <title& ...
- angular表单验证实例----可用的代码
前段时间,公司做一个单页面,就是一个表单验证,早开始在菜鸟教程上关注了angular,所以下派上用场了 angular里面对于表单验证,设置了很多指令. 也就是说不用自己写一些逻辑,直接绑定指令就行. ...
- 从浅入深剖析angular表单验证
最近手上维护的组件剩下的BUG都是表单验证,而且公司的表单验证那块代码经历的几代人,里面的逻辑开始变得不清晰,而且代码结构不是很angular. 是很有必要深入了解表单验证. 入门之前,我觉得应该先了 ...
- angular 表单验证
最近在用angular写表单验证时 , 不小心把ng-model全替换删掉了, 然后发现之前写的验证都失效, 在查阅资料和反复修改摸索后, 发现angular中的表单验证, 都是基于ng-model的 ...
- 简话Angular 05 Angular表单验证
一句话: 可以使用所有html5表单验证功能,同时Angular还增强了部分验证,支持动态验证 1. 上源码 <div ng-controller="ExampleController ...
- Angular 表单验证 基础篇
<div class="nav"> <h4>表单验证</h4> <form ng-app="myApp" name=& ...
随机推荐
- Mysql表的横向拆分与纵向拆分
表的拆分分为横向拆分(记录的拆分)和纵向拆分(字段的拆分).拆分表的目的:提高查询速度. 1.横向拆分 我们从一个案例去解释,情景是这样的:某某博客,有50W的博客量,有2w的用户,发现随着用户和博客 ...
- 修改Eclipse启动时的选择工作空间
对于eclipse的默认的工作空间,如果不需要正常切换workspace的用户很方便,打开eclipse便自动进入默认的工作空间.而如果用户经常在多个workspace之间切换的话,启动eclipse ...
- PAT 甲级 1024 Palindromic Number (25 分)(大数加法,考虑这个数一开始是不是回文串)
1024 Palindromic Number (25 分) A number that will be the same when it is written forwards or backw ...
- Docker 实践备忘录
平时零散的接触docker,时间久了概念和命令都会忘了,所以集中记下: docker 目标是实现轻量级的操作系统虚拟化解决方案. Docker 的基础是 Linux 容器(LXC)等技术 docker ...
- Flutter中通过循环渲染组件
class ContactsState extends State<Contacts>{ List formList; initState() { super.initState(); f ...
- C语言tips_2 关于scanf 读取规则小结以及与getchar 的区别
第一点:scanf默认回车和空格是输入不同组之间的间隔和结束符号. 也就是说他不会读取 空格 和 换行符.而是把他们当作一个 数据被读取完成的标志!他的停止标志则为,当%d之类的数据输入结束之后,自动 ...
- [MSCOCO] Ubuntu16.04下使用 tylin/coco-caption 评价 MSCOCO Caption(配置,及Demo运行)
Github链接:https://github.com/tylin/coco-caption Ubuntu版本信息 Linux内核版本号:Linux version 4.15.0-51-generic ...
- javaweb期末项目-stage3-项目测试和发布
项目综合报告.项目测试.项目部署 .rar---下载 说明:解压密码为袁老师的全名拼音(全小写) 相关链接: 项目结构:https://www.cnblogs.com/formyfish/p/1082 ...
- Python学习笔记——天气查询代码
天气查询代码1 # 此程序无法运行,因为中国天气网的api接口被关闭了 import urllib.request import json import pickle #建立城市字典 pickle_f ...
- NDK学习笔记-gdb调试
在做开发的时候,难免会crash,那么在这时候需要进行调试,在C/C++的代码调试中,gdb是很常用的gdb在这不做过多介绍,之前在C语言中已经做过总结,这里简要回顾一下 要使用gdb,在编译的时候需 ...