1. 程式人生 > >Angular專案中非同步校驗處理

Angular專案中非同步校驗處理

Angular中建立非同步校驗指令 phone-validator,並在相對應的module檔案中declarations{}下宣告該指令函式,

@NgModule({

  declarations: [
PhoneValidatorDirective,
],
該校驗器會實現一個validate()方法,返回結構為Promise<> 或者 Observable<>
validate(control: AbstractControl):Promise<ValidationErrors| null> | Observable<
ValidationErrors| null>{
 
 // 我的返回資料結構為Observable<Result<string>>
  //control.value 為當前控制元件的值
  this.us.verifyPhone(control.value).pipe(){ //rxjs程式設計 函式式操作
    //map操作符用於資料型別轉換
    map((rs: Result<string>)=>{
      return rs.success ? null:{verifyPhone: true};
     
    }),
    //of下封裝了一個Observable<ValidationError>並返回
    catchError(e=>of({verifyPhone: true}));
    
  }
}