使用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 getElementsByTagName的简写方式
Jun 27 Javascript
有关Promises异步问题详解
Nov 13 Javascript
基于javascript简单实现对身份证校验
Jan 25 Javascript
JavaScript继承学习笔记【新手必看】
May 10 Javascript
jQuery实现日期联动效果实例
Jul 26 Javascript
node.js express安装及示例网站搭建方法(分享)
Aug 22 Javascript
ES2015 Symbol 一种绝不重复的值
Dec 25 Javascript
浅谈vue,angular,react数据双向绑定原理分析
Nov 28 Javascript
js字符串类型String常用操作实例总结
Jul 05 Javascript
Vue3 中的数据侦测的实现
Oct 09 Javascript
javascript设计模式 ? 备忘录模式原理与用法实例分析
Apr 21 Javascript
nuxt静态部署打包相对路径操作
Nov 06 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 Session变量不能传送到下一页的解决方法
2009/11/27 PHP
Thinkphp模板中使用自定义函数的方法
2012/09/23 PHP
php中的路径问题与set_include_path使用介绍
2014/02/11 PHP
基于Laravel实现的用户动态模块开发
2017/09/21 PHP
js 动态选中下拉框
2009/11/26 Javascript
javascript向flash swf文件传递参数值注意细节
2012/12/11 Javascript
浅析JQuery获取和设置Select选项的常用方法总结
2013/07/04 Javascript
jquery获取当前点击对象的value方法
2014/02/28 Javascript
javascript+HTML5 Canvas绘制转盘抽奖
2020/05/16 Javascript
限制只能输入数字的实现代码
2016/05/16 Javascript
jQuery模拟实现的select点击选择效果【附demo源码下载】
2016/11/09 Javascript
详解webpack3如何正确引用并使用jQuery库
2017/08/26 jQuery
基于jQuery的左滑出现删除按钮的示例
2017/08/29 jQuery
vue element-ui table表格滚动加载方法
2018/03/02 Javascript
浅谈webpack打包之后的文件过大的解决方法
2018/03/07 Javascript
vue+webpack中配置ESLint
2018/11/07 Javascript
angular 用Observable实现异步调用的方法
2018/12/27 Javascript
elementUI select组件使用及注意事项详解
2019/05/29 Javascript
Vue监听页面刷新和关闭功能
2019/06/20 Javascript
Vue2.0 实现页面缓存和不缓存的方式
2019/11/12 Javascript
微信小程序wxml列表渲染原理解析
2019/11/27 Javascript
详解JSON.stringify()的5个秘密特性
2020/05/26 Javascript
[44:41]Fnatic vs Liquid 2018国际邀请赛小组赛BO2 第二场 8.16
2018/08/17 DOTA
打印出python 当前全局变量和入口参数的所有属性
2009/07/01 Python
利用python实现在微信群刷屏的方法
2019/02/21 Python
Pyqt清空某一个QTreeewidgetItem下的所有分支方法
2019/06/17 Python
Django --Xadmin 判断登录者身份实例
2020/07/03 Python
Anaconda+spyder+pycharm的pytorch配置详解(GPU)
2020/10/18 Python
HTML 5 标签、属性、事件及浏览器兼容性速查表 附打包下载
2012/10/20 HTML / CSS
HTML5 source标签:媒介元素定义媒介资源
2018/01/29 HTML / CSS
Weblogic和WebSphere不同特点
2012/05/09 面试题
大学生表扬信范文
2014/01/09 职场文书
汽车装潢店创业计划书范文
2014/02/05 职场文书
群众路线四风对照检查材料
2014/11/04 职场文书
保险公司客户经理岗位职责
2015/04/09 职场文书
公司财务管理制度
2015/08/04 职场文书