使用Angular自定義字段校驗(yàn)指令的方法示例
Angular中,提供的表單驗(yàn)證不能用于所有應(yīng)用場景,就需要?jiǎng)?chuàng)建自定義驗(yàn)證器,比如對(duì)IP、MAC的合法性校驗(yàn)
這里是根據(jù)官網(wǎng)實(shí)例自定義MAC地址的正則校驗(yàn),環(huán)境為Angular: 7.2.0 , NG-ZORRO:v7.0.0-rc3
添加指令
/shared/validator.directive.ts
注冊(cè)到 NG_VALIDATORS 提供商中
providers: [ {provide: NG_VALIDATORS, useExisting: ValidatorDirective, multi: true} ]
Angular 在驗(yàn)證流程中的識(shí)別出指令的作用,是因?yàn)橹噶畎炎约鹤?cè)到了 NG_VALIDATORS 提供商中,該提供商擁有一組可擴(kuò)展的驗(yàn)證器。
實(shí)現(xiàn) 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 選擇器添加到輸入框上就可以激活這個(gè)驗(yàn)證器。
在模板中使用
首先在模板所在的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"> 請(qǐng)輸入正確的Mac地址! </nz-form-explain> </nz-form-control> </nz-form-item>
在mac地址校驗(yàn)不通過時(shí),錯(cuò)誤信息便會(huì)顯示。如果想在失去焦點(diǎn)時(shí)顯示錯(cuò)誤信息可以使用validateForm.get('mac').touched,如下:
<nz-form-explain *ngIf="validateForm.get('mac').dirty && validateForm.get('mac').errors&&validateForm.get('mac').touched"> 請(qǐng)輸入正確的Mac地址! </nz-form-explain>
到此,自定義字段驗(yàn)證指令就完成了,更多請(qǐng)查看Angular官網(wǎng)表單驗(yàn)證自定義驗(yàn)證器部分。
以上就是本文的全部內(nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
- Angular實(shí)現(xiàn)模版驅(qū)動(dòng)表單的自定義校驗(yàn)功能(密碼確認(rèn)為例)
- angular4中關(guān)于表單的校驗(yàn)示例
- Angular模板表單校驗(yàn)方法詳解
- Angular在模板驅(qū)動(dòng)表單中自定義校驗(yàn)器的方法
- Angularjs使用指令做表單校驗(yàn)的方法
- Angular.js與node.js項(xiàng)目里用cookie校驗(yàn)賬戶登錄詳解
- AngularJs表單校驗(yàn)功能實(shí)例代碼
- 在 Angular2 中實(shí)現(xiàn)自定義校驗(yàn)指令(確認(rèn)密碼)的方法
- AngularJS入門教程之表單校驗(yàn)用法示例
相關(guān)文章
AngularJS獲取json數(shù)據(jù)的方法詳解
這篇文章主要介紹了AngularJS獲取json數(shù)據(jù)的方法,結(jié)合實(shí)例形式詳細(xì)分析了AngularJS獲取json數(shù)據(jù)的詳細(xì)步驟、操作技巧與相關(guān)注意事項(xiàng),需要的朋友可以參考下2017-05-05AngularJS基礎(chǔ) ng-options 指令詳解
本文主要介紹AngularJS ng-options 指令,這里對(duì)ng-options指令的知識(shí)做了詳細(xì)整理,并附有詳細(xì)的代碼示例,有需要的小伙伴可以參考下2016-08-08Angular實(shí)現(xiàn)預(yù)加載延遲模塊的示例
本篇文章主要介紹了Angular實(shí)現(xiàn)預(yù)加載延遲模塊的示例,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧2017-10-10Angular 根據(jù) service 的狀態(tài)更新 directive
Angular JS (Angular.JS) 是一組用來開發(fā)Web頁面的框架、模板以及數(shù)據(jù)綁定和豐富UI組件。本文給大家介紹Angular 根據(jù) service 的狀態(tài)更新 directive,需要的朋友一起學(xué)習(xí)吧2016-04-04通過AngularJS實(shí)現(xiàn)圖片上傳及縮略圖展示示例
本篇文章主要介紹了通過AngularJS實(shí)現(xiàn)圖片上傳及縮略圖展示,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧2017-01-01關(guān)于AngularJs數(shù)據(jù)的本地存儲(chǔ)詳解
本文主要介紹了每一個(gè)獨(dú)立的JS文件或者不同的控制器如何實(shí)現(xiàn)數(shù)據(jù)的共享與交互的方法。具有一定的參考價(jià)值,下面跟著小編一起來看下吧2017-01-01妙用Angularjs實(shí)現(xiàn)表格按指定列排序
使用AngularJS的過濾器,可以很容易的實(shí)現(xiàn)在表格中,點(diǎn)擊某一列標(biāo)題進(jìn)行排序,實(shí)現(xiàn)代碼也很簡單,下面小編給大家分享angularjs實(shí)現(xiàn)表格按指定列排序的實(shí)現(xiàn)代碼,需要的的朋友參考下吧2017-06-06