2017-05-08 5 views
3

用ませプロバイダは、私は、HTTPのインターセプターのようにそれを使用することができるように、私自身のHTTPサービスを作成したいんが、私はで始まる非常に長いエラーを取得:EXCEPTION: Uncaught (in promise): Error: No provider for XHRBackend!角度2カスタムHTTPサービスは、エラーがスローされます。XHRBackend

にhttp .service.ts

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


@Injectable() 
export class HttpService extends Http { 
    constructor(backend: XHRBackend, options: RequestOptions) { 
     console.log('HttpService constructor'); 
     super(backend, options); 
    } 

    request(url: string|Request, options?: RequestOptionsArgs): Observable<Response> { 
     console.log('HttpService request'); 
     return super.request(url, options); 
    }  
} 

export const HTTP_SERVICE = { 
    provide: HttpService, 
    useFactory: (backend: XHRBackend, options: RequestOptions) => { 
     return new HttpService(backend, options); 
    }, 
    deps: [XHRBackend, RequestOptions] 
}; 

そして私はapp.module.ts

import { NgModule } from '@angular/core'; 
import { BrowserModule } from '@angular/platform-browser'; 

import { AppRoutingModule } from './app-routing.module'; 

import { AppComponent } from './app.component'; 

import { AuthService } from './auth/auth.service'; 
import { HTTP_SERVICE } from './shared/http/http.service'; 

@NgModule({ 
    imports: [ 
     BrowserModule, 
     AppRoutingModule 
    ], 
    declarations: [ 
     AppComponent 
    ], 
    providers: [ 
     AuthService, 
     HTTP_SERVICE 
    ], 
    bootstrap: [AppComponent] 
}) 
export class AppModule { } 

でそれを追加します。しかし、私はコンポーネント内のコンストラクタに注入するとき、それは動作しません。私は言及されたエラーを得る。

私も、私が行うことができることを読ん:このブログから

{ provide: Http, useClass: HttpService} 

http://www.adonespitogo.com/articles/angular-2-extending-http-provider/

しかし、これも動作しません。ここではエラーは発生しませんが、何も違いはありません。私はコードから期待どおりにコンソールに出力を得ません。

プロバイダコードにHttpServiceをそのまま追加してみましたが、それでもエラーが表示されました。

+3

'HttpModule'を' imports'に追加するだけで、すでに定義されているプロバイダを取得できます。そうすれば、あなたは 'HTTP_SERVICE'を必要とせず、ブログからシンプルなプロバイダを使うこともできます。 – jonrsharpe

+1

[Httpから継承している[ConnectionBackendのプロバイダがありません]の複製があります。(http://stackoverflow.com/questions/40507670/no-provider-for-connectionbackend-while-inheriting-from-http) – jonrsharpe

+0

私は同じ問題がありますが解決策はありませんでしたか? –

答えて

0

Mukul Jayaprakashと記載されている場合、にhttpModuleを追加するとこの問題が解決されます。

関連する問題