全网整合营销服务商

电脑端+手机端+微信端=数据同步管理

免费咨询热线:400-708-3566

Angular2 自定义validators的实现方法

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小时内与您取得联系。