如何在Angular2中创建拦截器?
在Angular2中创建拦截器的原因是为了能够在请求之前和之后拦截HTTP请求,并对其进行处理。通过创建一个继承自Http的自定义类,可以实现这个目的。下面是代码示例:
export class CustomHttp extends Http { constructor(backend: ConnectionBackend, defaultOptions: RequestOptions) { super(backend, defaultOptions); } request(url: string | Request, options?: RequestOptionsArgs): Observable{ console.log('request...'); return super.request(url, options).catch(res => { // 在这里处理异常 }); } get(url: string, options?: RequestOptionsArgs): Observable { console.log('get...'); return super.get(url, options).catch(res => { // 在这里处理异常 }); } }
然后,需要将这个类注册到Angular2的依赖注入系统中,以便在应用中使用。在RC4版本之前可以使用以下代码进行注册:
bootstrap(AppComponent, [HTTP_PROVIDERS, new Provider(Http, { useFactory: (backend: XHRBackend, defaultOptions: RequestOptions) => new CustomHttp(backend, defaultOptions), deps: [XHRBackend, RequestOptions] }) ]);
在RC4版本之后,可以使用以下代码进行注册:
bootstrap(AppComponent, [HTTP_PROVIDERS, { provide: Http, useFactory: (backend: XHRBackend, defaultOptions: RequestOptions) => new CustomHttp(backend, defaultOptions), deps: [XHRBackend, RequestOptions] } ]);
这样就可以拦截HTTP请求了。如果需要处理响应,可以在CustomHttp类中重写相应的方法。如果想要在订阅中抛出错误,需要在catch块中返回Observable.throw(...)。希望这个回答对你有帮助!