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 】
相关推荐:
如何在不使用负向后查找的情况下匹配特定条件前的换行符
晋江文学城电脑版官网 晋江文学城网页版直接进入
网站制作报价单模板图片,小松挖机官方网站报价?
如何用VPS主机快速搭建个人网站?
专业型网站制作公司有哪些,我设计专业的,谁给推荐几个设计师兼职类的网站?
Laravel Octane如何提升性能_使用Laravel Octane加速你的应用
C#如何调用原生C++ COM对象详解
如何在IIS中新建站点并解决端口绑定冲突?
微信公众帐号开发教程之图文消息全攻略
如何快速重置建站主机并恢复默认配置?
网站制作软件免费下载安装,有哪些免费下载的软件网站?
Laravel怎么判断请求类型_Laravel Request isMethod用法
ai格式如何转html_将AI设计稿转换为HTML页面流程【页面】
UC浏览器如何设置启动页 UC浏览器启动页设置方法
作用域操作符会触发自动加载吗_php类自动加载机制与::调用【教程】
EditPlus中的正则表达式 实战(2)
Laravel怎么定时执行任务_Laravel任务调度器Schedule配置与Cron设置【教程】
如何快速生成高效建站系统源代码?
uc浏览器二维码扫描入口_uc浏览器扫码功能使用地址
Laravel如何使用Vite进行前端资源打包?(配置示例)
EditPlus 正则表达式 实战(3)
武汉网站设计制作公司,武汉有哪些比较大的同城网站或论坛,就是里面都是武汉人的?
如何快速搭建个人网站并优化SEO?
php中::能调用final静态方法吗_final修饰静态方法调用规则【解答】
Laravel如何优雅地处理服务层_在Laravel中使用Service层和Repository层
如何在香港免费服务器上快速搭建网站?
Laravel怎么设置路由分组Prefix_Laravel多级路由嵌套与命名空间隔离【步骤】
如何在阿里云ECS服务器部署织梦CMS网站?
为什么php本地部署后css不生效_静态资源加载失败修复技巧【技巧】
Laravel项目如何进行性能优化_Laravel应用性能分析与优化技巧大全
常州企业网站制作公司,全国继续教育网怎么登录?
Angular 表单中正确绑定输入值以确保提交与验证正常工作
Laravel的契約(Contracts)是什么_深入理解Laravel Contracts与依赖倒置
Java Adapter 适配器模式(类适配器,对象适配器)优缺点对比
Laravel怎么进行数据库事务处理_Laravel DB Facade事务操作确保数据一致性
移动端手机网站制作软件,掌上时代,移动端网站的谷歌SEO该如何做?
利用vue写todolist单页应用
实例解析Array和String方法
如何在 Telegram Web View(iOS)中防止键盘遮挡底部输入框
详解jQuery停止动画——stop()方法的使用
Laravel如何集成第三方登录_Laravel Socialite实现微信QQ微博登录
JavaScript中如何操作剪贴板_ClipboardAPI怎么用
在线制作视频的网站有哪些,电脑如何制作视频短片?
Laravel如何处理CORS跨域问题_Laravel项目CORS配置与解决方案
Python进程池调度策略_任务分发说明【指导】
HTML透明颜色代码在Angular里怎么设置_Angular透明颜色使用指南【详解】
Laravel控制器是什么_Laravel MVC架构中Controller的作用与实践
浅谈Javascript中的Label语句
如何实现建站之星域名转发设置?
laravel怎么使用数据库工厂(Factory)生成带有关联模型的数据_laravel Factory生成关联数据方法

