使用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 1.5最新版本的改进细节分析
Jan 19 Javascript
JavaScript prototype属性深入介绍
Nov 27 Javascript
js中的布尔运算符使用介绍
Nov 20 Javascript
javascript简单性能问题及学习笔记
Feb 04 Javascript
Jquery validation remote 验证的缓存问题解决方法
Mar 25 Javascript
JS+CSS实现简单的二级下拉导航菜单效果
Sep 21 Javascript
javascript滚轮事件基础实例讲解(37)
Feb 14 Javascript
jQuery实现贪吃蛇小游戏(附源码下载)
Mar 04 Javascript
vue 项目地址去掉 #的方法
Oct 20 Javascript
Vuex中的State使用介绍
Jan 19 Javascript
详解vue后台系统登录态管理
Apr 02 Javascript
详解Vue 匿名、具名和作用域插槽的使用方法
Apr 22 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
2.PHP入门
2006/10/09 PHP
新浪微博OAuth认证和储存的主要过程详解
2015/03/27 PHP
关于php几种字符串连接的效率比较(详解)
2017/02/22 PHP
PHP 实现人民币小写转换成大写的方法及大小写转换函数
2017/11/17 PHP
深入解析PHP底层机制及相关原理
2020/12/11 PHP
JavaScript多线程的实现方法
2007/05/08 Javascript
JS在IE和FF下attachEvent,addEventListener学习笔记
2009/11/26 Javascript
在浏览器中实现图片粘贴的jQuery插件-- pasteimg使用指南
2014/12/29 Javascript
jQuery往返城市和日期查询实例讲解
2015/10/09 Javascript
使用ES6语法重构React代码详解
2017/05/09 Javascript
页面缩放兼容性处理方法(zoom,Firefox火狐浏览器)
2017/08/29 Javascript
微信小程序和百度的语音识别接口详解
2019/05/06 Javascript
js实现自定义右键菜单
2020/05/18 Javascript
js实现弹窗猜数字游戏
2020/11/26 Javascript
Python解释执行原理分析
2014/08/22 Python
在Python中处理字符串之isdigit()方法的使用
2015/05/18 Python
在Linux系统上安装Python的Scrapy框架的教程
2015/06/11 Python
Python下载指定页面上图片的方法
2016/05/12 Python
python WindowsError的错误代码详解
2017/07/23 Python
pandas DataFrame 根据多列的值做判断,生成新的列值实例
2018/05/18 Python
python判断一个数是否能被另一个整数整除的实例
2018/12/12 Python
Python3.5内置模块之time与datetime模块用法实例分析
2019/04/27 Python
Python安装OpenCV的示例代码
2020/03/05 Python
学会迭代器设计模式,帮你大幅提升python性能
2021/01/03 Python
Python实现邮件发送的详细设置方法(遇到问题)
2021/01/18 Python
德国著名廉价网上药店:Shop-Apotheke
2017/07/23 全球购物
在职研究生自我鉴定
2013/10/16 职场文书
水利专业大学生职业生涯规划书范文
2014/09/17 职场文书
授权委托书范本(单位)
2014/09/28 职场文书
学校领导干部民主生活会整改方案
2014/09/29 职场文书
2014年大学班级工作总结
2014/11/14 职场文书
2015年保险公司内勤工作总结
2015/05/23 职场文书
2019年图书室自查报告范本
2019/10/12 职场文书
导游词之山东八仙过海景区
2019/11/11 职场文书
导游词之安徽醉翁亭
2020/01/10 职场文书
分享CSS盒子模型隐藏的几种方式
2022/02/28 HTML / CSS