2017-05-31 30 views
0

我試圖打開我的ng-bootstrap對話框,但它不工作,我沒有任何異常...怎樣才能生成一個通用服務來處理401異常與自定義模式對話框?Angular 4 - 在catch http異常中打開一個模態對話框

Service.ts

@Injectable() 
export class SearchRequisitionService { 
    apiURL: string; 
    private modal: NgbModalRef; 

    constructor(private http: Http, private modalService: NgbModal) { 
     this.apiURL = 'requisition'; 
    } 

    findRequisition(jsonSearchParams: string): Observable<Array<Reponse>> { 
     let searchParams = JSON.stringify(jsonSearchParams); 
     let headers = new Headers(); 
     headers.append('Content-Type', 'application/json'); 
     return this.http.post(this.apiURL + '/reponse', searchParams, { 
      headers: headers 
     }).map(this.extractData).catch(this.handleError); 
    } 

    findEtatsLists(): Observable<Array<EnumType>> { 
     return this.http.get(this.apiURL + '/etatsAnalyse').map(this.extractData).catch(this.handleError); 
    } 

    private extractData(res: Response) { 
     let body = res.json(); 
     return body || {}; 
    } 

    private handleError(error: Response | any) { 
     // In a real world app, you might use a remote logging infrastructure 
     let errMsg: string; 
     if (error instanceof Response) { 

      if (error.status === 401) { 
       this.modalService.open(AuthModalContent); 
      } 
      const body = error.json() || ''; 
      const err = body.error || JSON.stringify(body); 
      errMsg = `${error.status} - ${error.statusText || ''} ${err}`; 
     } else { 
      errMsg = error.message ? error.message : error.toString(); 
     } 
     console.error(errMsg); 
     return Observable.throw(errMsg); 
    } 

} 

this.modalService是不確定的,但我在Module.ts聲明的一切:

@NgModule({ 
    imports: [ 
     AnfiPortailSharedModule, 
     FormsModule, 
     NgbModule, 
     NgxPaginationModule, 
     RouterModule.forRoot(requiRoutes, {useHash: true}) 
    ], 
    declarations: [ 
     SearchComponent, 
     ResultsComponent, 
     AuthModalContent, 
     ClickOutsideDirective 
    ], 
    entryComponents: [AuthModalContent], 
    exports: [], 
    providers: [ConfigService, SearchRequisitionService, { 
     provide: NgbDateParserFormatter, 
     useFactory: customNgbDateParserFormatterFactory 
    }], 
    schemas: [CUSTOM_ELEMENTS_SCHEMA] 
}) 
export class AnfiPortailRequisitionModule { 
} 
+0

這篇文章給我的解決方案=> https://stackoverflow.com/questions/37988781/angular-2-injected-service-in-http-error-handler –

回答

0

HTTP狀態可以是字符串,所以你應該使用簡單的「==」運算符或將狀態轉換爲int:

if (parseInt(error.status, 10) === 401) 
+0

不,我打電話給後,如果... ...打開功能 –

+1

你有沒有試圖將你的函數綁定到這個:'this.handleError.bind(this)'? – ip512

相關問題