1. 程式人生 > 其它 >angular自定義驗證器實現所遇到的問題

angular自定義驗證器實現所遇到的問題

1:返回值問題 校驗器

2:返回值型別

3:建立自定義指令配置注意

 

 

1:校驗器

回過頭來看一下表單校驗的校驗器。校驗器共有兩種,同步校驗和非同步校驗,驗證器函式接受一個control,然後返回一組錯誤物件(驗證不通過)或 null(驗證通過),當未返回任何內容時表示未開始校驗

非同步校驗器要求返回Promise或Observable,同時返回的可觀察物件必須是有限的,也就是說,它必須在某個時間點結束(complete)。要把無盡的可觀察物件轉換成有限的,可以使用 first、last、take 或 takeUntil 等過濾型管道對其進行處理。

驗證錯誤是一個物件,物件結構唯一的要求是key必須為字串,值可以為any型別,例如你可以返回一個{duplicate: true},表示當前control的duplicate校驗未通過。

值得注意的是,出於效能考慮,非同步校驗器會在所有同步校驗器完成之後才會觸發,在此之前非同步校驗器會處於正確狀態。

非同步驗證開始時,表單將進入Pending狀態,當驗證結果返回之後才會變成valid或invalid。在判斷表單狀態的時候需要注意一下非同步問題。當判斷為pending時進入一個定時器迴圈判斷直到不為pending為止。

 

 

2:返回值型別

返回值型別必須是一個promise 或者是一個Observable型別的資料

 

3:建立自定義指令配置注意

驗證器返回的內容切記:驗證結果為正確時,返回null 不可返回空

非同步驗證開始時,表單將進入Pending

狀態,當驗證結果返回之後才會變成valid或invalid。在判斷表單狀態的時候需要注意一下非同步問題。當判斷為pending時進入一個定時器迴圈判斷直到不為pending為止