使用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 相关文章推荐
javascript 避免闭包引发的问题
Mar 17 Javascript
DIV外区域Click后关闭DIV的实现代码
Dec 21 Javascript
可以用鼠标拖动的DIV实现思路及代码
Oct 21 Javascript
jQuery Validate初步体验(一)
Dec 12 Javascript
JS DOMReady事件的六种实现方法总结
Nov 23 Javascript
JS实现的图片选择顺序切换和循环切换功能示例【测试可用】
Dec 28 Javascript
浅谈webpack性能榨汁机(打包速度优化)
Jan 09 Javascript
纯JS开发baguetteBox.js响应式画廊插件
Jun 28 Javascript
jQuery 实现DOM元素拖拽交换位置的实例代码
Jul 14 jQuery
js节流防抖应用场景,以及在vue中节流防抖的具体实现操作
Sep 21 Javascript
Vue 实现拨打电话操作
Nov 16 Javascript
详解CocosCreator消息分发机制
Apr 16 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动态地创建属性和方法, 对象的复制, 对象的比较,加载指定的文件,自动加载类文件,命名空间
2016/05/06 PHP
php微信公众号开发之现金红包
2018/04/16 PHP
php测试kafka项目示例
2020/02/06 PHP
在IE下:float属性会影响offsetTop的取值
2006/12/22 Javascript
JQuery 获取和设置Select选项的代码
2010/02/07 Javascript
jQuery EasyUI API 中文文档 - Documentation 文档
2011/09/29 Javascript
有关于eclipse配置spket需要注意的一些地方
2013/04/07 Javascript
JS正则表达式获取分组内容的方法详解
2013/11/15 Javascript
jquery使整个div区域可以点击的方法
2015/06/24 Javascript
jQuery实现的鼠标滑过弹出放大图片特效
2016/01/08 Javascript
jQuery ajax分页插件实例代码
2016/01/27 Javascript
Google 地图事件实例讲解
2016/08/06 Javascript
用vue的双向绑定简单实现一个todo-list的示例代码
2017/08/03 Javascript
vue与vue-i18n结合实现后台数据的多语言切换方法
2018/03/08 Javascript
angularJs中跳转到指定的锚点实例($anchorScroll)
2018/08/31 Javascript
代码整洁之道(重构)
2018/10/25 Javascript
微信小程序单选框自定义赋值
2020/05/26 Javascript
vue实现滚动鼠标滚轮切换页面
2020/12/13 Vue.js
vue集成一个支持图片缩放拖拽的富文本编辑器
2021/01/29 Vue.js
[06:37]2014DOTA2国际邀请赛 昔日王者渴望重回巅峰
2014/07/12 DOTA
Python自动重试HTTP连接装饰器
2015/04/28 Python
Python实现包含min函数的栈
2016/04/29 Python
对python3新增的byte类型详解
2018/12/04 Python
python PIL和CV对 图片的读取,显示,裁剪,保存实现方法
2019/08/07 Python
基于Python实现签到脚本过程解析
2019/10/25 Python
python 已知平行四边形三个点,求第四个点的案例
2020/04/12 Python
HTML5声音录制/播放功能的实现代码
2018/05/03 HTML / CSS
TripAdvisor斯洛伐克:阅读评论、比较价格和酒店预订
2018/04/25 全球购物
监理员的岗位职责
2013/11/13 职场文书
毕业生求职的求职信
2013/12/05 职场文书
特教教师先进事迹
2014/05/21 职场文书
学习型班组申报材料
2014/05/31 职场文书
物流专业专科生职业生涯规划书
2014/09/14 职场文书
党的群众路线教育实践活动个人对照检查材料(教师)
2014/11/04 职场文书
2014年护士个人工作总结
2014/11/11 职场文书
Requests什么的通通爬不了的Python超强反爬虫方案!
2021/05/20 Python