使用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 相关文章推荐
用Mootools获得操作索引的两种方法分享
Dec 12 Javascript
javascript ie6兼容position:fixed实现思路
Apr 01 Javascript
js操纵dom生成下拉列表框的方法
Feb 24 Javascript
JavaScript中String.prototype用法实例
May 20 Javascript
jquery实现经典的淡入淡出选项卡效果代码
Sep 22 Javascript
jQuery Validate初步体验(二)
Dec 12 Javascript
JavaScript function函数种类详解
Feb 22 Javascript
JavaScript资源预加载组件和滑屏组件的使用推荐
Mar 10 Javascript
jquery编写Tab选项卡滚动导航切换特效
Jul 17 Javascript
完美解决node.js中使用https请求报CERT_UNTRUSTED的问题
Jan 08 Javascript
js实现图片跟随鼠标移动效果
Oct 16 Javascript
微信小程序实现轨迹回放的示例代码
Dec 13 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
ThinkPHP中公共函数路径和配置项路径的映射分析
2014/11/22 PHP
是 WordPress 让 PHP 更流行了 而不是框架
2016/02/03 PHP
php数值转换时间及时间转换数值用法示例
2017/05/18 PHP
原生JavaScript实现连连看游戏(附源码)
2013/11/05 Javascript
Javascript脚本实现静态网页加密实例代码
2013/11/05 Javascript
Jquery 切换不同图片示例代码
2013/12/05 Javascript
JavaScript阻止浏览器返回按钮的方法
2015/03/18 Javascript
javascript数据结构与算法之检索算法
2015/04/04 Javascript
js获取当前日期时间及其它操作汇总
2015/04/17 Javascript
详细解读JavaScript的跨浏览器事件处理
2015/08/12 Javascript
javascript倒计时效果实现
2015/11/12 Javascript
使用 stylelint检查CSS_StyleLint
2016/04/28 Javascript
利用jquery给指定的table动态添加一行、删除一行的方法
2016/10/12 Javascript
详解Nodejs内存治理
2018/05/13 NodeJs
vue-i18n结合Element-ui的配置方法
2019/05/20 Javascript
Vue中全局变量的定义和使用
2019/06/05 Javascript
这样回答继承可能面试官更满意
2019/12/10 Javascript
微信小程序 (地址选择1)--选取搜索地点并显示效果
2019/12/17 Javascript
如何配置vue.config.js 处理static文件夹下的静态文件
2020/06/19 Javascript
vuex刷新后数据丢失的解决方法
2020/10/18 Javascript
Python模拟登陆淘宝并统计淘宝消费情况的代码实例分享
2016/07/04 Python
一篇文章读懂Python赋值与拷贝
2018/04/19 Python
Python字符串处理的8招秘籍(小结)
2019/08/13 Python
python opencv实现证件照换底功能
2019/08/19 Python
Pandas时间序列重采样(resample)方法中closed、label的作用详解
2019/12/10 Python
宝拉珍选官方旗舰店:2%水杨酸精华液,收缩毛孔粗大和祛痘
2018/07/01 全球购物
文职个人求职信范文
2013/09/23 职场文书
中文专业毕业生自荐信
2013/10/28 职场文书
初中生物教学反思
2014/01/10 职场文书
《梅兰芳学艺》教学反思
2014/02/24 职场文书
公司办公室岗位职责
2014/03/19 职场文书
公职人员索取回扣检举信
2014/04/04 职场文书
《画风》教学反思
2014/04/16 职场文书
学生偷窃检讨书
2014/09/25 职场文书
幼儿园教师安全责任书
2015/05/08 职场文书
JAVA API 实用类 String详解
2021/10/05 Java/Android