欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

使用Angular自定义字段校验指令的方法示例

程序员文章站 2022-05-14 09:13:38
angular中,提供的表单验证不能用于所有应用场景,就需要创建自定义验证器,比如对ip、mac的合法性校验 这里是根据自定义mac地址的正则校验,环境为angular...

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官网表单验证自定义验证器部分。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。