Angular 4 – открыть модальный диалог в исключении HTTP

Я пытаюсь открыть свой диалог ng-bootstrap, но он не работает, у меня нет исключений... Как создать общий сервис для обработки исключения 401 с помощью пользовательского модального диалога?

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 {
}

person Clement Martino    schedule 31.05.2017    source источник
comment
Этот пост дает мне решение => stackoverflow.com/questions/37988781/   -  person Clement Martino    schedule 31.05.2017


Ответы (1)


http статус может быть строкой, поэтому вы должны использовать простой оператор "==" или приводить статус к int :

 if (parseInt(error.status, 10) === 401)
person ip512    schedule 31.05.2017
comment
Вы пытались связать свою функцию с этим: this.handleError.bind(this)? - person ip512; 31.05.2017