使用Angular自定义字段校验指令的方法示例
Angular中,提供的表单验证不能用于所有应用场景,就需要创建自定义验证器,比如对IP、MAC的合法性校验
这里是根据官网实例自定义MAC地址的正则校验,环境为Angular:7.2.0,NG-ZORRO:v7.0.0-rc3
添加指令
/shared/validator.directive.ts
注册到NG_VALIDATORS提供商中
providers:[ {provide:NG_VALIDATORS,useExisting:ValidatorDirective,multi:true} ]
Angular在验证流程中的识别出指令的作用,是因为指令把自己注册到了NG_VALIDATORS提供商中,该提供商拥有一组可扩展的验证器。
实现Validator接口
import{Directive,Input}from'@angular/core'; import{Validator,AbstractControl,NG_VALIDATORS}from'@angular/forms'; @Directive({ selector:'[appValidator]', providers:[ {provide:NG_VALIDATORS,useExisting:ValidatorDirective,multi:true} ] }) exportclassValidatorDirectiveimplementsValidator{ @Input('appValidator')value:string; validate(control:AbstractControl):{[key:string]:any}|null{ constvalidateMac=/^(([A-Fa-f0-9]{2}[:]){5}[A-Fa-f0-9]{2}[,]?)+$/; switch(this.value){ case'mac': returnvalidateMac.exec(control['value'])?null:{validate:true}; break; } } }
ValidatorDirective写好后,只要把appValidator选择器添加到输入框上就可以激活这个验证器。
在模板中使用
首先在模板所在的module中引入该指令
import{ValidatorDirective}from"../../shared/validator.directive"; @NgModule({ imports:[ SharedModule ], declarations:[ ValidatorDirective ], providers:[ AuthGuard ], })
在html中使用
请输入正确的Mac地址!
在mac地址校验不通过时,错误信息便会显示。如果想在失去焦点时显示错误信息可以使用validateForm.get('mac').touched,如下:
请输入正确的Mac地址!
到此,自定义字段验证指令就完成了,更多请查看Angular官网表单验证自定义验证器部分。
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持毛票票。