2016-09-02 2 views
6

私はCustomHttpクラスを持っていると私は私のget要求にヘッダを追加するためにそれを使用する:RC5でRC6でHttpクラスをオーバーライドする方法は?

import { Injectable } from '@angular/core'; 
import { Observable } from 'rxjs/Rx'; 
import { RequestOptionsArgs, RequestOptions, ConnectionBackend, Http, Request, Response, Headers } from "@angular/http"; 

@Injectable() 
export class CustomHttp extends Http { 

headers: Headers = new Headers({ 'Something': 'Something' }); 
options1: RequestOptions = new RequestOptions({ headers: this.headers }); 

constructor(backend: ConnectionBackend, 
    defaultOptions: RequestOptions) { 
    super(backend, defaultOptions); 
} 

get(url: string, options?: RequestOptionsArgs) { 
    console.log('Custom get...'); 
    return super.get(url, this.options1).catch(err => { 
     console.log(err); 
     if (err.status === 404) { 
      console.log('404 error'); 
      return Observable.throw(err); 
     } 
    }); 
    } 
} 

、私はこのような私のAppModuleプロバイダにこれを追加しました:

provide (Http, { 
      useFactory: (
       backend: XHRBackend, 
       defaultOptions: RequestOptions) => 
       new CustomHttp(backend, defaultOptions), 
      deps: [XHRBackend, RequestOptions] 
     }) 

しかし、RC6で、 provideから@angular/coreが廃止されました。AppModuleプロバイダにCustomHttpクラスを追加する際に問題が発生しています。誰かがこれを行う方法を考えていますか?

答えて

6

構文は、それはまだ同じように動作する必要があり、そのほかに、ビットを変更あります

{ provide: Http, 
     useFactory: (
      backend: XHRBackend, 
      defaultOptions: RequestOptions) => 
      new CustomHttp(backend, defaultOptions), 
     deps: [XHRBackend, RequestOptions] 
    } 
+0

をうん、それはそれです!今度は、 '@ angular/core'から' provide'をインポートする代わりに、 'Provider'をインポートする必要があります。 RC6で変更されたもう一つのことは、 '@Angel/http'から' ConnectionBackend'をインポートしてモジュールプロバイダに追加する必要がなくなったことです。どうもありがとう! –

+0

なぜあなたは 'Provider'をインポートする必要がありますか?私はそれが事実だとは思わない。 –

+0

ええ、あなたは正しい、私の悪いです。それを削除し、それはまだ魅力のように動作します。私はこれを修正しようとしていた間にそれを早期にインポートしていたので、必要と思った。 –

関連する問題