Angular2 自定义validators的实现方法
发布时间 - 2026-01-11 02:11:00 点击率:次angular 当需要form表单需要验证时,angular自带了许多校验器,但是很多时候自带的无法满足业务需求,这时候就需要自定义的校验器

定义一个validator
定义validator 需要实现 ValidatorFn 接口
源码:
export interface ValidatorFn {
(c: AbstractControl): ValidationErrors | null;
}
接收一个 AbstractControl 返回 ValidationErrors 或者null
ValidationErrors 源码
export declare type ValidationErrors = {
[key: string]: any;
};
这其实就是返回一个 key value 类型的对象,这个对象会在验证信息不通过的时候赋值给 formControl.errors
写好的Validator 需要在创建FormControl作为参数传入
FormControl 的构造器源码
export declare class FormControl extends AbstractControl {
constructor(formState?: any, validator?: ValidatorFn | ValidatorFn[] | null, asyncValidator?: AsyncValidatorFn | AsyncValidatorFn[] | null);
下面是个简单的例子(校验邮箱地址):
定义一个返回 ValidatorFn 接口的方法
static EMAIL_REG = new RegExp('\\w[-\\w.+]*@([A-Za-z0-9][-A-Za-z0-9]+\.)+[A-Za-z]{2,14}');
static email(): ValidatorFn {
return (control: AbstractControl): { [key: string]: any } => { ①
if (!EMAIL_REG.test(control.value)) { ②
return { ③
errMsg: '请输入正确的邮箱地址'
};
}
return {}; ④
};
}
① 方法返回 ValidatorFn 的实例
② 判断是否符合邮箱正则表达式
③ 如果不符合 返回一个 ValidationErrors 对象,errMsg 作为错误信息输出 (这里也可以再加一个 布尔型的作为判断)
④ 如果校验成功返回一个空的对象
传入校验器
email = new FormControl('', email())
模板:
<p *ngIf = "!email.valid && email.touched">{{email.errors.errMsg}}</p>
当邮箱格式不正确时 这里就会显示 ‘请输入正确的邮箱地址'
至此一个简单的校验器就完成了。
如果想比较2个form的值是否相等的话只需要做一些小的改变
static EMAIL_REG = new RegExp('\\w[-\\w.+]*@([A-Za-z0-9][-A-Za-z0-9]+\.)+[A-Za-z]{2,14}');
static email(emailForm: FormControl): ValidatorFn { ①
return (control: AbstractControl): { [key: string]: any } => {
if (emailForm.value !== control.value ) {
return {
errMsg: '请输入相同邮箱地址'
};
}
return {};
};
}
① 只需要在这里传入另一个需要做对比的 formControl 即可
email = new FormControl('', email())
email2 = new FormControl('', email(email))
以上所述是小编给大家介绍的Angular2 自定义validators的实现方法,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对网站的支持!
# angular2
# 自定义validators
# Spring Boot+AngularJS+BootStrap实现进度条示例代码
# AngularJS实现tab选项卡的方法详解
# AngularJS实现单一页面内设置跳转路由的方法
# angular过滤器实现排序功能
# angularjs+bootstrap实现自定义分页的实例代码
# AngularJS实现元素显示和隐藏的几个案例
# AngularJS实现表单验证
# 在AngularJS应用中实现一些动画效果的代码
# AngularJS实现全选反选功能
# 用AngularJS的指令实现tabs切换效果
# 实例详解AngularJS实现无限级联动菜单
# AngularJS实现进度条功能示例
# 请输入
# 邮箱地址
# 自定义
# 小编
# 就会
# 是个
# 在这里
# 在此
# 只需
# 会在
# 要做
# 给大家
# 布尔
# 只需要
# 不符合
# 带了
# 自带
# 表单
# 错误信息
# 再加
相关栏目:
【
网站优化151355 】
【
网络推广146373 】
【
网络技术251813 】
【
AI营销90571 】
相关推荐:
如何快速辨别茅台真假?关键步骤解析
Python结构化数据采集_字段抽取解析【教程】
阿里云网站搭建费用解析:服务器价格与建站成本优化指南
在centOS 7安装mysql 5.7的详细教程
Laravel中间件起什么作用_Laravel Middleware请求生命周期与自定义详解
javascript中的数组方法有哪些_如何利用数组方法简化数据处理
Python3.6正式版新特性预览
如何确保西部建站助手FTP传输的安全性?
Swift开发中switch语句值绑定模式
Laravel如何使用查询构建器?(Query Builder高级用法)
使用spring连接及操作mongodb3.0实例
Laravel如何操作JSON类型的数据库字段?(Eloquent示例)
Win11摄像头无法使用怎么办_Win11相机隐私权限开启教程【详解】
Laravel控制器是什么_Laravel MVC架构中Controller的作用与实践
网站优化排名时,需要考虑哪些问题呢?
中国移动官方网站首页入口 中国移动官网网页登录
如何安全更换建站之星模板并保留数据?
🚀拖拽式CMS建站能否实现高效与个性化并存?
,在苏州找工作,上哪个网站比较好?
Windows11怎样设置电源计划_Windows11电源计划调整攻略【指南】
Android利用动画实现背景逐渐变暗
PHP 500报错的快速解决方法
bootstrap日历插件datetimepicker使用方法
Laravel如何实现事件和监听器?(Event & Listener实战)
实例解析angularjs的filter过滤器
Laravel观察者模式如何使用_Laravel Model Observer配置
公司网站制作需要多少钱,找人做公司网站需要多少钱?
个人网站制作流程图片大全,个人网站如何注销?
javascript中数组(Array)对象和字符串(String)对象的常用方法总结
高防服务器如何保障网站安全无虞?
Laravel如何处理JSON字段的查询和更新_Laravel JSON列操作与查询技巧
弹幕视频网站制作教程下载,弹幕视频网站是什么意思?
浏览器如何快速切换搜索引擎_在地址栏使用不同搜索引擎【搜索】
北京网页设计制作网站有哪些,继续教育自动播放怎么设置?
郑州企业网站制作公司,郑州招聘网站有哪些?
浅述节点的创建及常见功能的实现
Laravel Debugbar怎么安装_Laravel调试工具栏配置指南
高防服务器租用指南:配置选择与快速部署攻略
Laravel如何处理和验证JSON类型的数据库字段
SQL查询语句优化的实用方法总结
Mybatis 中的insertOrUpdate操作
在线教育网站制作平台,山西立德教育官网?
北京网站制作的公司有哪些,北京白云观官方网站?
Angular 表单中正确绑定输入值以确保提交与验证正常工作
Java遍历集合的三种方式
品牌网站制作公司有哪些,买正品品牌一般去哪个网站买?
如何自定义建站之星模板颜色并下载新样式?
想要更高端的建设网站,这些原则一定要坚持!
教你用AI将一段旋律扩展成一首完整的曲子
如何快速搭建高效WAP手机网站吸引移动用户?

