使用Angular自定义字段校验指令的方法示例


Posted in Javascript onFebruary 01, 2019

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}
    ]
})

export class ValidatorDirective implements Validator {
  @Input('appValidator') value: string;

  validate(control: AbstractControl): { [key: string]: any } | null {
    const validateMac = /^(([A-Fa-f0-9]{2}[:]){5}[A-Fa-f0-9]{2}[,]?)+$/;
    switch (this.value) {
      case 'mac':
        return validateMac.exec(control['value']) ? null : {validate: true};
        break;
    }
  }

}

ValidatorDirective写好后,只要把 appValidator 选择器添加到输入框上就可以激活这个验证器。

在模板中使用

首先在模板所在的module中引入该指令

import {ValidatorDirective} from "../../shared/validator.directive";

@NgModule({
  imports: [
    SharedModule
  ],
  declarations: [
    ValidatorDirective
  ],
  providers: [
    AuthGuard
  ],
})

在html中使用

<nz-form-item>
    <nz-form-control>
      <nz-input-group>
        <input formControlName="mac" nz-input type="text" placeholder="mac" appValidator="mac">
      </nz-input-group>
      <nz-form-explain *ngIf="validateForm.get('mac').dirty && validateForm.get('mac').errors">
        请输入正确的Mac地址!
      </nz-form-explain>
    </nz-form-control>
  </nz-form-item>

在mac地址校验不通过时,错误信息便会显示。如果想在失去焦点时显示错误信息可以使用validateForm.get('mac').touched,如下:

<nz-form-explain *ngIf="validateForm.get('mac').dirty && validateForm.get('mac').errors&&validateForm.get('mac').touched">
        请输入正确的Mac地址!
      </nz-form-explain>

到此,自定义字段验证指令就完成了,更多请查看Angular官网表单验证自定义验证器部分。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
Jquery中使用setInterval和setTimeout的方法
Apr 08 Javascript
JS小功能(button选择颜色)简单实例
Nov 29 Javascript
jquery 图片缩放拖动的简单实例
Jan 08 Javascript
浅谈javascript 函数属性和方法
Jan 21 Javascript
Angularjs全局变量被作用域监听的正确姿势
Feb 06 Javascript
AngularJS 简单应用实例
Jul 28 Javascript
jquery根据一个值来选中select下的option实例代码
Aug 29 Javascript
jQuery属性选择器用法示例
Sep 09 Javascript
AngularJS框架中的双向数据绑定机制详解【减少需要重复的开发代码量】
Jan 19 Javascript
JS设置随机出现2个数字的实例代码
Jul 19 Javascript
小程序图片剪裁加旋转的示例代码
Jul 10 Javascript
JS实现方形抽奖效果
Aug 27 Javascript
angular中如何绑定iframe中src的方法
Feb 01 #Javascript
Javascript迭代、递推、穷举、递归常用算法实例讲解
Feb 01 #Javascript
JS集合set类的实现与使用方法示例
Feb 01 #Javascript
详解如何使用webpack打包多页jquery项目
Feb 01 #jQuery
详解Vue中watch对象内属性的方法
Feb 01 #Javascript
JS字典Dictionary类定义与用法示例
Feb 01 #Javascript
在 Vue.js中优雅地使用全局事件的方法
Feb 01 #Javascript
You might like
PHP 实现explort() 功能的详解
2013/06/20 PHP
PHP错误Parse error: syntax error, unexpected end of file in test.php on line 12解决方法
2014/06/23 PHP
PHP获取短链接跳转后的真实地址和响应头信息的方法
2014/07/25 PHP
CI框架支持$_GET的两种实现方法
2016/05/18 PHP
PHP 二维关联数组根据其中一个字段排序(推荐)
2017/04/04 PHP
关于jQuery $.isNumeric vs. $.isNaN vs. isNaN
2013/04/15 Javascript
EXTjs4.0的store的findRecord的BUG演示代码
2013/06/08 Javascript
jQuery中on()方法用法实例详解
2015/02/06 Javascript
jquery if条件语句的写法
2016/05/19 Javascript
js弹出窗口简单实现代码
2017/03/22 Javascript
修改UA在PC中访问只能在微信中打开的链接方法
2017/11/27 Javascript
AngularJs点击状态值改变背景色的实例
2017/12/18 Javascript
解决layer.confirm选择完之后消息框不消失的问题
2019/09/16 Javascript
javascript实现滚动条效果
2020/03/24 Javascript
详解JavaScript数据类型和判断方法
2020/09/04 Javascript
[01:30]DOTA2上海特锦赛现场采访 Loda倾情献唱
2016/03/25 DOTA
[49:58]完美世界DOTA2联赛PWL S3 Magma vs DLG 第一场 12.18
2020/12/19 DOTA
Python中的推导式使用详解
2015/06/03 Python
在Django中同时使用多个配置文件的方法
2015/07/22 Python
python简单商城购物车实例代码
2018/03/15 Python
python实现flappy bird小游戏
2018/12/24 Python
Django之编辑时根据条件跳转回原页面的方法
2019/08/21 Python
Python3批量移动指定文件到指定文件夹方法示例
2019/09/02 Python
Python-openpyxl表格读取写入的案例详解
2020/11/02 Python
VSCODE配置Markdown及Markdown基础语法详解
2021/01/19 Python
美国受欢迎的眼影品牌:BH Cosmetics
2016/10/25 全球购物
八年级音乐教学反思
2014/01/09 职场文书
大学生在校学习的自我评价
2014/02/18 职场文书
2014年迎新年活动方案
2014/02/19 职场文书
会计人员岗位职责
2014/03/19 职场文书
2014教师年度思想工作总结
2014/11/10 职场文书
2014年法务工作总结
2014/12/11 职场文书
仰望星空观后感
2015/06/10 职场文书
Python3 类型标注支持操作
2021/06/02 Python
SQL中的三种去重方法小结
2021/11/01 SQL Server
Apache Pulsar集群搭建部署详细过程
2022/02/12 Servers