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手机网站吸引移动用户?