2
import { Injectable } from '@angular/core';
import {
Http,
Response,
Request,
RequestOptions,
RequestOptionsArgs,
XHRBackend
} from '@angular/http';
import { Observable } from 'rxjs/Observable';
import 'rxjs/add/observable/throw';
import 'rxjs/add/operator/catch';
@Injectable()
export class HttpInterceptor extends Http {
constructor(xhrBackend: XHRBackend, requestOptions: RequestOptions) {
super(xhrBackend, requestOptions);
}
private catchErrors() {
return (response: Response) => {
if (response.status === 418) {
// do some stuff here
}
return Observable.throw(response);
};
}
request(url: string | Request, options?: RequestOptionsArgs): Observable<Response> {
return super.request(url, options)
.catch(this.catchErrors());
}
}
:角2で
angular.module('app', [])
.service('httpResponseInterceptor', ['$q', function ($q) {
this.response = function (response) {
if (response.status === 418) {
// do some stuff here
}
return response || $q.when(response);
};
this.responseError = function (response) {
if (response.status === 418) {
// do some stuff here
}
return $q.reject(response);
};
}])
.config(['$httpProvider', function ($httpProvider) {
// do routing, etc.
$httpProvider.interceptors.push('httpResponseInterceptor');
}]);
、それが代わりにこのようなHttp
何かを延長して行われます
...とapp.module.ts
でこれを含めることにより:
providers: [
{ provide: Http, useClass: HttpInterceptor }
]
参照のためにthis stackoverflow answerおよびthis gistを参照してください。
しかし、私は上記の角度2のコードでこのエラーを取得しています:
は、循環依存をインスタンス化することはできません! HTTP:in NgModule AppModule
はこのためにありがとうございました! 'useFactory'と' deps'が 'useClass'の代わりに私にとって正しく働いています。 –