使用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 相关文章推荐
用js实现计算代码行数的简单方法附代码
Aug 13 Javascript
HTA版JSMin(省略修饰语若干)基于javascript语言编写
Dec 24 Javascript
javascript 函数声明与函数表达式的区别介绍
Oct 05 Javascript
js获得网页背景色和字体色的方法
Mar 21 Javascript
移动端js触摸事件详解
Sep 18 Javascript
利用angular.copy取消变量的双向绑定与解析
Nov 25 Javascript
jQuery代码优化方法总结
Jan 29 jQuery
详解vue-router 命名路由和命名视图
Jun 01 Javascript
egg.js的基本使用和调用数据库的方法示例
May 18 Javascript
d3.js实现图形拖拽
Dec 19 Javascript
JavaScript获取当前url路径过程解析
Dec 27 Javascript
vue3 自定义图片放大器效果的示例代码
Jul 23 Vue.js
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 如何向 MySQL 发送数据
2006/10/09 PHP
PHP 编程请选择正确的文本编辑软件
2006/12/21 PHP
深入了解PHP类Class的概念
2012/06/14 PHP
php版微信公众平台实现预约提交后发送email的方法
2016/09/26 PHP
ThinkPHP中调用PHPExcel的实现代码
2017/04/08 PHP
PHP生成推广海报的方法分享
2018/04/22 PHP
javascript 图片上一张下一张链接效果代码
2010/03/12 Javascript
js 手机号码合法性验证代码集合
2012/09/29 Javascript
js数组依据下标删除元素
2015/04/14 Javascript
js过滤HTML标签完整实例
2015/11/26 Javascript
jQuery实现图片文字淡入淡出效果
2015/12/21 Javascript
Bootstrap每天必学之按钮(Button)插件
2016/04/25 Javascript
Jquery获取当前城市的天气信息
2016/08/05 Javascript
Js实现京东无延迟菜单效果实例(demo)
2017/06/02 Javascript
React Native 使用Fetch发送网络请求的示例代码
2017/12/02 Javascript
JavaScript ES6常用基础知识总结
2019/02/09 Javascript
详解一个基于套接字实现长连接的express
2019/03/28 Javascript
JavaScript实现的3D旋转魔方动画效果实例代码
2019/07/31 Javascript
JS+css3实现幻灯片轮播图
2020/08/14 Javascript
python django事务transaction源码分析详解
2017/03/17 Python
Django中login_required装饰器的深入介绍
2017/11/24 Python
Python3实现定时任务的四种方式
2019/06/03 Python
如何基于python实现画不同品种的樱花树
2020/01/03 Python
PyCharm vs VSCode,作为python开发者,你更倾向哪种IDE呢?
2020/08/17 Python
python使用scapy模块实现ARP扫描的过程
2021/01/21 Python
M1芯片安装python3.9.1的实现
2021/02/02 Python
使用HTML5 IndexDB存储图像和文件的示例
2018/11/05 HTML / CSS
游戏商店:Eneba
2020/04/25 全球购物
移动通信专业自荐信范文
2013/11/12 职场文书
业务经理的岗位职责
2013/11/16 职场文书
乡镇领导班子批评与自我批评材料
2014/09/23 职场文书
校园文化艺术节宣传标语
2014/10/09 职场文书
卖房协议书样本
2014/10/30 职场文书
个人收入证明格式
2015/06/24 职场文书
2016道德模范先进事迹材料
2016/02/26 职场文书
2019年销售人员的职业生涯规划书
2019/03/25 职场文书