2016-05-25 75 views
0

我想在Angular2中爲所有Http調用提供一個錯誤處理方法。我期待類似AngularJS攔截東西Angular2

如何在Angular2中將Http_Provider重寫爲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

你怎麼做了'新的供應商(... )'Angular 2 RC 5中的一部分? –

+2

{提供:Http,useFactory :(後端:XHRBackend,defaultOptions:RequestOptions)=>新的CustomHttp(後端,defaultOptions)} –