2016-05-25 1 views
0

Я хотел бы иметь один метод обработки ошибок для всех вызовов Http в Angular2. Я смотрю что-то похожее на AngularJS-перехватчик в Angular2

Как переопределить Http_Provider в Angular2 как AngularJS-перехватчик

В AngularJS есть перехватчики, которые могут быть перенесены в Http_Provider, так что вы можете иметь единственный метод для всего вашего ответа.

Я пытаюсь использовать следующий код, который не работает для меня.

import {HTTP_PROVIDERS, BaseRequestOptions, ResponseOptions} from '@angular/http'; 
class MyOptions extends BaseRequestOptions { 
/* 
body : string | Object 
status : number 
headers : Headers 
url : string 
*/ 
} 
bootstrap(AppComponent,[HTTP_PROVIDERS,provide(ResponseOptions , {useClass: MyOptions})]); 


ваш ответ будет оценен.

ответ

4

Для реализации запроса перехвата, вы можете расширить класс Http таким образом:

@Injectable() 
export class CustomHttp extends Http { 
    constructor(backend: ConnectionBackend, defaultOptions: RequestOptions) { 
    super(backend, defaultOptions); 
    } 

    request(url: string | Request, options?: RequestOptionsArgs): Observable<Response> { 
    console.log('request...'); 
    return super.request(url, options).catch(res => { 
     // do something 
    });   
    } 

    get(url: string, options?: RequestOptionsArgs): Observable<Response> { 
    console.log('get...'); 
    return super.get(url, options).catch(res => { 
     // do something 
    }); 
    } 
} 

и зарегистрировать его, как описано ниже:

bootstrap(AppComponent, [HTTP_PROVIDERS, 
    new Provider(Http, { 
     useFactory: (backend: XHRBackend, defaultOptions: RequestOptions) => new CustomHttp(backend, defaultOptions), 
     deps: [XHRBackend, RequestOptions] 
    }) 
]); 
+1

Как вы делаете 'нового поставщика (...) 'part в Angular 2 RC 5? –

+2

{Предоставить: Http, useFactory: (бэкенд: XHRBackend, defaultOptions: RequestOptions) => новый CustomHttp (backend, defaultOptions)} –

Смежные вопросы