Angular跨字段驗(yàn)證器中如何直接調(diào)用其它獨(dú)立的驗(yàn)證器
在angular中關(guān)于表單動態(tài)驗(yàn)證的一種新思路一文中我們給出了Angular項(xiàng)目進(jìn)行字段校驗(yàn)的三種方法。本文我們將重點(diǎn)圍繞第一種方法展開討論。
假設(shè)有如下應(yīng)用:

該應(yīng)用的功能是對輸入的數(shù)值的奇偶數(shù)進(jìn)行判斷,如果滿足條件,則啟用Submit按鈕,否則不啟用。
跨字段驗(yàn)證
由于對輸入數(shù)值的校驗(yàn)是根據(jù)輸入類型來區(qū)分的,所以這里我們需要一個跨輸入類型及輸入數(shù)值的驗(yàn)證器:
ngOnInit(): void {
this.formGroup.setValidators((formGroup) => {
formGroup = formGroup as FormGroup;
const type = formGroup.get('type').value as number;
if (type === 0) {
// 驗(yàn)證是否是偶數(shù) 1??
} else {
// 驗(yàn)證是否為奇數(shù) 1??
}
});
}雖然我們可以在1??處直接寫入驗(yàn)證器的邏輯,但從分工的角度上來講,這往往是最壞的一種的方案。
為此,我們同時準(zhǔn)備了驗(yàn)證器:
/**
* 數(shù)字校驗(yàn)器
*/
export class NumberValidator {
/**
* 偶數(shù)校驗(yàn)器
*/
static isEven(control: AbstractControl): ValidationErrors | null {
const value = +control.value as number;
if (Number.isInteger(value) && value % 2 === 0) {
return null;
} else {
return { isEven: '輸入的數(shù)字不是偶數(shù)' };
}
}
/**
* 奇數(shù)校驗(yàn)器
*/
static isOdd(control: AbstractControl): ValidationErrors | null {
const value = +control.value as number;
if (Number.isInteger(value) && value % 2 === 1) {
return null;
} else {
return { isOdd: '輸入的數(shù)字不是奇數(shù)' };
}
}
}使用獨(dú)立的驗(yàn)證器
有了獨(dú)立的驗(yàn)證器后,我們可以使用類似如下的代碼,直接在跨字段校驗(yàn)器中進(jìn)行調(diào)用:
ngOnInit(): void {
this.formGroup.setValidators((formGroup) => {
formGroup = formGroup as FormGroup;
const type = formGroup.get('type').value as number;
if (type === 0) {
return NumberValidator.isEven(formGroup.get('value')); ??
} else {
return NumberValidator.isOdd(formGroup.get('value')); ??
}
});
}是的,在調(diào)用的時候?qū)⑿枰?yàn)證的FormControl傳入即可。
如果我們的跨字段驗(yàn)證器需要同時對多個字段進(jìn)行校驗(yàn),則還可以這樣:
const result = {
...Validators.required(formGroup.get(this.formKeys.image)),
...Validators.required(formGroup.get(this.formKeys.imageLeftTopPoint)),
...Validators.required(formGroup.get(this.formKeys.imageRightBottomPoint)),
...MapPointValidator.isPoint(formGroup.get(this.formKeys.imageLeftTopPoint)),
...MapPointValidator.isPoint(formGroup.get(this.formKeys.imageRightBottomPoint))
}
return Object.keys(result).length === 0 ? null : result; ???? 處對返回的錯誤信息進(jìn)行判斷,如果長度為0,則說明返回了{(lán)},直接返回null,否則返回多個驗(yàn)證器拼接后的錯誤信息。
如果你想看到具體的代碼,請點(diǎn)擊:示例代碼
總結(jié)
到此這篇關(guān)于Angular跨字段驗(yàn)證器中如何直接調(diào)用其它獨(dú)立的驗(yàn)證器的文章就介紹到這了,更多相關(guān)Angular調(diào)用其它獨(dú)立驗(yàn)證器內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
前后端如何實(shí)現(xiàn)登錄token攔截校驗(yàn)詳解
這篇文章主要給大家介紹了關(guān)于前后端如何實(shí)現(xiàn)登錄token攔截校驗(yàn)的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2018-09-09
AngularJS基礎(chǔ)學(xué)習(xí)筆記之指令
指令(Directives)是所有AngularJS應(yīng)用最重要的部分。盡管AngularJS已經(jīng)提供了非常豐富的指令,但還是經(jīng)常需要創(chuàng)建應(yīng)用特定的指令。這篇教程會為你講述如何自定義指令,以及介紹如何在實(shí)際項(xiàng)目中使用。2015-05-05
Angular搜索 過濾 批量刪除 添加 表單驗(yàn)證功能集錦(實(shí)例代碼)
這篇文章主要介紹了Angular搜索 過濾 批量刪除 添加 表單驗(yàn)證功能集錦(實(shí)例代碼),需要的朋友可以參考下2017-10-10
在Angular中使用NgTemplateOutlet創(chuàng)建可重用組件的流程步驟
在 Angular 中,使用 NgTemplateOutlet 而不是創(chuàng)建特定組件,可以使組件在不修改組件本身的情況下輕松修改為各種用例,在本文中,您將接受一個現(xiàn)有組件并重寫它以使用 NgTemplateOutlet,需要的朋友可以參考下2024-03-03

