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实现进度条功能示例
# 请输入
# 邮箱地址
# 自定义
# 小编
# 就会
# 是个
# 在这里
# 在此
# 只需
# 会在
# 要做
# 给大家
# 布尔
# 只需要
# 不符合
# 带了
# 自带
# 表单
# 错误信息
# 再加
相关文章:
官网建站费用明细查询_企业建站套餐价格及收费标准指南
开心动漫网站制作软件下载,十分开心动画为何停播?
网站制作大概要多少钱一个,做一个平台网站大概多少钱?
济南企业网站制作公司,济南社保单位网上缴费步骤?
我的世界制作壁纸网站下载,手机怎么换我的世界壁纸?
如何用IIS7快速搭建并优化网站站点?
北京企业网站设计制作公司,北京铁路集团官方网站?
微网站制作教程,我微信里的网站怎么才能复制到浏览器里?
简单实现Android验证码
C#如何在一个XML文件中查找并替换文本内容
网站制作服务平台,有什么网站可以发布本地服务信息?
南宁网站建设制作定制,南宁网站建设可以定制吗?
建站之星在线版空间:自助建站+智能模板一键生成方案
北京网站制作的公司有哪些,北京白云观官方网站?
车管所网站制作流程,交警当场开简易程序处罚决定书,在交警网站查询不到怎么办?
如何用低价快速搭建高质量网站?
如何通过西部建站助手安装IIS服务器?
如何在服务器上三步完成建站并提升流量?
枣阳网站制作,阳新火车站打的到仙岛湖多少钱?
如何用PHP快速搭建高效网站?分步指南
金*站制作公司有哪些,金华教育集团官网?
c++怎么用jemalloc c++替换默认内存分配器【性能】
存储型VPS适合搭建中小型网站吗?
如何快速搭建自助建站会员专属系统?
如何快速搭建高效香港服务器网站?
如何规划企业建站流程的关键步骤?
如何设置并定期更换建站之星安全管理员密码?
c++23 std::expected怎么用 c++优雅处理函数错误返回【详解】
网站制作软件有哪些,制图软件有哪些?
公司网站制作需要多少钱,找人做公司网站需要多少钱?
建站主机选购指南:核心配置优化与品牌推荐方案
如何快速完成中国万网建站详细流程?
如何用好域名打造高点击率的自主建站?
常州自助建站工具推荐:低成本搭建与模板选择技巧
如何在万网主机上快速搭建网站?
常州企业建站如何选择最佳模板?
广州网站设计制作一条龙,广州巨网网络科技有限公司是干什么的?
制作宣传网站的软件,小红书可以宣传网站吗?
专业的网站制作设计是什么,如何制作一个企业网站,建设网站的基本步骤有哪些?
为什么Go需要go mod文件_Go go mod文件作用说明
七夕网站制作视频,七夕大促活动怎么报名?
网站建设制作、微信公众号,公明人民医院怎么在网上预约?
邀请函制作网站有哪些,有没有做年会邀请函的网站啊?在线制作,模板很多的那种?
广州建站公司哪家好?十大优质服务商推荐
网站按钮制作软件,如何实现网页中按钮的自动点击?
网站企业制作流程,用什么语言做企业网站比较好?
如何使用Golang table-driven基准测试_多组数据测量函数效率
如何选择长沙网站建站模板?H5响应式与品牌定制哪个更优?
香港网站服务器数量如何影响SEO优化效果?
如何选择靠谱的建站公司加盟品牌?
*请认真填写需求信息,我们会在24小时内与您取得联系。