Angular跨字段驗證器中如何直接調(diào)用其它獨立的驗證器
在angular中關(guān)于表單動態(tài)驗證的一種新思路一文中我們給出了Angular項目進行字段校驗的三種方法。本文我們將重點圍繞第一種方法展開討論。
假設(shè)有如下應(yīng)用:
該應(yīng)用的功能是對輸入的數(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,否則返回多個驗證器拼接后的錯誤信息。
如果你想看到具體的代碼,請點擊:示例代碼
總結(jié)
到此這篇關(guān)于Angular跨字段驗證器中如何直接調(diào)用其它獨立的驗證器的文章就介紹到這了,更多相關(guān)Angular調(diào)用其它獨立驗證器內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
AngularJS基礎(chǔ)學(xué)習(xí)筆記之指令
指令(Directives)是所有AngularJS應(yīng)用最重要的部分。盡管AngularJS已經(jīng)提供了非常豐富的指令,但還是經(jīng)常需要創(chuàng)建應(yīng)用特定的指令。這篇教程會為你講述如何自定義指令,以及介紹如何在實際項目中使用。2015-05-05Angular搜索 過濾 批量刪除 添加 表單驗證功能集錦(實例代碼)
這篇文章主要介紹了Angular搜索 過濾 批量刪除 添加 表單驗證功能集錦(實例代碼),需要的朋友可以參考下2017-10-10在Angular中使用NgTemplateOutlet創(chuàng)建可重用組件的流程步驟
在 Angular 中,使用 NgTemplateOutlet 而不是創(chuàng)建特定組件,可以使組件在不修改組件本身的情況下輕松修改為各種用例,在本文中,您將接受一個現(xiàn)有組件并重寫它以使用 NgTemplateOutlet,需要的朋友可以參考下2024-03-03