HTML5原生的表單校驗屬性(必填,長度限制,取值間隔,正則表達(dá)式等等)可以滿足普通的校驗需求,但是有些場景必須用到自定義校驗,比如注冊時的密碼確認(rèn),有比對關(guān)系的時間/數(shù)值選擇, 需要到請求到服務(wù)端取值驗證等等···這里以密碼確認(rèn)為例進(jìn)行說明。
指令開發(fā)
表單的驗證狀態(tài)是通過 formContro l的 errors 屬性反饋出來的,所以基本的思路肯定就是需要添加校驗規(guī)則,然后將驗證結(jié)果添加到formControl實例的errors屬性中。那么問題來了,模版驅(qū)動表單的控制都是在HTML模版中完成的,無法直接接觸到 formControl實例。這個時候就需要使用指令了,將檢驗規(guī)則進(jìn)行包裝。Angular提供了 驗證器供應(yīng)商 NG_VALIDATORS ,用于處理表單自定義校驗。先創(chuàng)建指令。
import { Directive} from '@angular/core'; import { NG_VALIDATORS, Validator, AbstractControl} from '@angular/forms'; @Directive({ selector: '[appConfirmpsw]', providers: [{ provide : NG_VALIDATORS, useExisting : ConfirmpswDirective, multi: true }] }) export class ConfirmpswDirective implements Validator { constructor() { } validate(control: AbstractControl): {[key: string]: any} { //檢驗規(guī)則 } }