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

該應用的功能是對輸入的數(shù)值的奇偶數(shù)進行判斷,如果滿足條件,則啟用Submit按鈕,否則不啟用。
跨字段驗證
由于對輸入數(shù)值的校驗是根據(jù)輸入類型來區(qū)分的,所以這里我們需要一個跨輸入類型及輸入數(shù)值的驗證器:
ngOnInit(): void {
this.formGroup.setValidators((formGroup) => {
formGroup = formGroup as FormGroup;
const type = formGroup.get('type').value as number;
if (type === 0) {
// 驗證是否是偶數(shù) 1??
} else {
// 驗證是否為奇數(shù) 1??
}
});
}雖然我們可以在1??處直接寫入驗證器的邏輯,但從分工的角度上來講,這往往是最壞的一種的方案。
為此,我們同時準備了驗證器:
/**
* 數(shù)字校驗器
*/
export class NumberValidator {
/**
* 偶數(shù)校驗器
*/
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ù)校驗器
*/
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ù)' };
}
}
}使用獨立的驗證器
有了獨立的驗證器后,我們可以使用類似如下的代碼,直接在跨字段校驗器中進行調(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ū)⑿枰炞C的FormControl傳入即可。
如果我們的跨字段驗證器需要同時對多個字段進行校驗,則還可以這樣:
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; ???? 處對返回的錯誤信息進行判斷,如果長度為0,則說明返回了{},直接返回null,否則返回多個驗證器拼接后的錯誤信息。
如果你想看到具體的代碼,請點擊:示例代碼
總結
到此這篇關于Angular跨字段驗證器中如何直接調(diào)用其它獨立的驗證器的文章就介紹到這了,更多相關Angular調(diào)用其它獨立驗證器內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!
相關文章
AngularJs學習第八篇 過濾器filter創(chuàng)建
這篇文章主要介紹了AngularJs學習第八篇 過濾器filter創(chuàng)建的相關資料,非常不錯具有參考借鑒價值,需要的朋友可以參考下2016-06-06
Angular6 用戶自定義標簽開發(fā)的實現(xiàn)方法
這篇文章主要介紹了Angular6 用戶自定義標簽開發(fā)的實現(xiàn)方法,下面我們就通過一個簡單的例子演示Angular6中的這一新功能,小編覺得挺不錯的,現(xiàn)在分享給大家,需要的朋友可以參考下2019-01-01
Angular.JS內(nèi)置服務$http對數(shù)據(jù)庫的增刪改使用教程
我們可以使用內(nèi)置的$http服務直接同外部進行通信。$http服務只是簡單的封裝了瀏覽器原生的XMLHttpRequest對象,下面這篇文章主要給大家介紹了關于Angular.JS內(nèi)置服務$http對數(shù)據(jù)庫的增刪改等操作的相關資料,需要的朋友可以參考下。2017-05-05
關于Angular2 + node接口調(diào)試的解決方案
這篇文章主要給大家介紹了關于Angular2 + node接口調(diào)試的解決方案,文中介紹的非常詳細,對大家具有一定的參考學習價值,需要的朋友們下面來一起看看吧。2017-05-05
Angular中的ng-template及angular 使用ngTemplateOutlet 指令的方法
ng-template 是用來定義模板的,當使用ng-template定義好一個模板之后,可以用ng-container和templateOutlet指令來進行使用。這篇文章給大家介紹了Angular中的ng-templateangular及使用 ngTemplateOutlet 指令的方法,需要的朋友參考下吧2018-08-08

