Angular 2(Ionic 2):拦截ajax请求

Chr*_*ler 1 javascript angularjs ionic-framework ionic2 angular

使用Angular 1.x可以使用以下代码拦截所有ajax请求:

$httpProvider.interceptors.push('interceptRequests');
...
var app_services = angular.module('app.services', []);
   app_services.factory('interceptRequests', [function () {
   var authInterceptorServiceFactory = {};
   var _request = function (config) {
   //do something here
   };
   var _responseError = function (rejection) {
   //do something here
   }
   authInterceptorServiceFactory.request = _request;
   authInterceptorServiceFactory.responseError = _responseError;
   return authInterceptorServiceFactory;
}]);
Run Code Online (Sandbox Code Playgroud)

Angular 2中是否有类似的(或开箱即用的)?

Thi*_*ier 6

一种方法可以是扩展HTTP对象以拦截调用:

@Injectable()
export class CustomHttp extends Http {

  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
    });
  }
}
Run Code Online (Sandbox Code Playgroud)

并按如下所述注册:

bootstrap(AppComponent, [HTTP_PROVIDERS,
    new Provider(Http, {
      useFactory: (backend: XHRBackend, defaultOptions: RequestOptions) => new CustomHttp(backend, defaultOptions),
      deps: [XHRBackend, RequestOptions]
  })
]);
Run Code Online (Sandbox Code Playgroud)

您可以利用catch运算符来捕获错误并在全局范围内处理错误...

请参阅此plunkr:https://plnkr.co/edit/ukcJRuZ7QKlV73jiUDd1 p = preview .