Angularの例外:HTTPのプロバイダーがありません


333

EXCEPTION: No provider for Http!Angularアプリでを取得しています。何が悪いのですか?

import {Http, Headers} from 'angular2/http';
import {Injectable} from 'angular2/core'


@Component({
    selector: 'greetings-ac-app2',
    providers: [],
    templateUrl: 'app/greetings-ac2.html',
    directives: [NgFor, NgModel, NgIf, FORM_DIRECTIVES],
    pipes: []
})
export class GreetingsAcApp2 {
    private str:any;

    constructor(http: Http) {

        this.str = {str:'test'};

        http.post('http://localhost:18937/account/registeruiduser/',
            JSON.stringify(this.str),
            {
                headers: new Headers({
                    'Content-Type': 'application/json'
                })
            });

3
あなたは行方不明HTTP_PROVIDERSです。
Eric Martinez

1
インポート/エクスポート...誰か、これはどんな構文ですか?
vp_arth 2015年

5
それはTypescript構文です
ダニエル2015年

10
インポート/エクスポート-JavaScriptシンタックス(ES6)
alexpods 2015年

3
回答の1つが実際にをインポートする必要がある理由HttpModuleとそれが何をするのを実際に説明しているとよいでしょう。
Drazen Bjelovuk

回答:


520

HttpModuleをインポートする

import { HttpModule } from '@angular/http';

@NgModule({
    imports: [ BrowserModule, HttpModule ],
    providers: [],
    declarations: [ AppComponent ],
    bootstrap: [ AppComponent ]
})
export default class AppModule { }

platformBrowserDynamic().bootstrapModule(AppModule);

理想的には、このコードを2つの別々のファイルに分割します。詳細については以下をお読みください:


2
現在のAngular2ベータでは、ファイルはと呼ばれていapp.tsます。
d135-1r43

7
angular-cliで生成されたプロジェクトでは、ファイルはと呼ばれmain.tsます。
filoxo 2016年

NgModuleがない場合はどうなりますか?angular2モジュールを開発していますが、NgModuleがありませんが、テストにはHttpプロバイダーが必要です
iRaS

私がチェックした@Webruster。それでも動作するはずです。正確なエラーコードを教えていただけますか?
フィリップ

2
@PhilipMiglinci ...貴重な回答に感謝..ファイルが角2.0のapp.module.tsであることをシーカーにいくつかのポイントを追加して説明しますこれは、さらに継承されたモジュールを含むプロジェクトのコアファイルですクラス。
shaan gola 2017

56

> =角度4.3

導入された HttpClientModule

import { HttpClientModule } from '@angular/common/http';

@NgModule({
  imports: [
    BrowserModule,
    FormsModule, // if used
    HttpClientModule,
    JsonpModule // if used
  ],
  declarations: [ AppComponent ],
  bootstrap:    [ AppComponent ]
})
export class AppModule { }

Angular2> = RC.5

HttpModule使用するモジュールにインポートします(ここでは例AppModule

import { HttpModule } from '@angular/http';

@NgModule({
  imports: [
    BrowserModule,
    FormsModule, // if used
    HttpModule,
    JsonpModule // if used
  ],
  declarations: [ AppComponent ],
  bootstrap:    [ AppComponent ]
})
export class AppModule { }

のインポートは、以前のバージョンでのHttpModule追加と非常に似ていHTTP_PROVIDERSます。


9

2016年9月14日のAngular 2.0.0リリースでは、まだHttpModuleを使用しています。メインapp.module.tsは次のようになります。

import { HttpModule } from '@angular/http';

@NgModule({
   bootstrap: [ AppComponent ],
   declarations: [ AppComponent ],
   imports: [
      BrowserModule,
      HttpModule,
      // ...more modules...
   ],
   providers: [
      // ...providers...
   ]
})
export class AppModule {}

次に、あなたapp.ts自身でブートストラップすることができます:

import { platformBrowserDynamic } from '@angular/platform-browser-dynamic';
import { AppModule } from './app/main/app.module';

platformBrowserDynamic().bootstrapModule(AppModule);

9

HttpModuleを追加して、配列をapp.module.tsファイルにインポートしてから使用します。

import { HttpModule } from '@angular/http';

@NgModule({
  declarations: [
    AppComponent,
    CarsComponent
  ],
  imports: [
    BrowserModule,
	HttpModule  
  ],
  providers: [],
  bootstrap: [AppComponent]
})
export class AppModule { }


9

rc.5以来、あなたは次のようなことをしなければなりません

@NgModule({
    imports: [ BrowserModule],
    providers: [ HTTP_PROVIDERS ],  
    declarations: [ AppComponent ],
    bootstrap: [ AppComponent ]
})
export default class AppModule { }

platformBrowserDynamic().bootstrapModule(AppModule);


5

HttpModuleapp.module.tsファイルにインポートします。

import { HttpModule } from '@angular/http';
import { YourHttpTestService } from '../services/httpTestService';

また、以下のようにインポート時にHttpModuleを宣言することも忘れないでください。

imports: [
    BrowserModule,
    HttpModule
  ],

4

以下のようにプロバイダー配列にHttpを追加して、コンポーネントのデコレーターを変更するのが最善の方法です。

@Component({
    selector: 'greetings-ac-app2',
    providers: [Http],
    templateUrl: 'app/greetings-ac2.html',
    directives: [NgFor, NgModel, NgIf, FORM_DIRECTIVES],
    pipes: []
})

誰がそれを間違っているとマークした人がいますか、その理由は何ですか?
Shivang Gupta 2016

5
私は反対投票しませんでしたが、その理由はおそらくHttp、各コンポーネントに新しいオブジェクトが必要ないことです。アプリ用に1つ用意することをお勧めしNgModuleます。これは、レベルでアプリをインポートすることによって実現されます。
Ted Hopp

3

RC5以降では、次のようにHttpModuleをインポートする必要があります。

import { HttpModule } from '@angular/http';

次に、Günterが前述したように、HttpModuleをimports配列に含めます。


3

次のライブラリを含めるだけです。

import { HttpModule } from '@angular/http';
import { YourHttpTestService } from '../services/httpTestService';

providers次のように、セクションにhttpクラスを含めます。

@Component({
  selector: '...',
  templateUrl: './test.html',
  providers: [YourHttpTestService]

3

テストでこのエラーが発生した場合は、すべてのサービスに対して偽のサービスを作成する必要があります。

例えば:

import { YourService1 } from '@services/your1.service';
import { YourService2 } from '@services/your2.service';

class FakeYour1Service {
 public getSomeData():any { return null; }
}

class FakeYour2Service {
  public getSomeData():any { return null; }
}

そしてbeforeEach:

beforeEach(async(() => {
  TestBed.configureTestingModule({
    providers: [
      Your1Service,
      Your2Service,
      { provide: Your1Service, useClass: FakeYour1Service },
      { provide: Your2Service, useClass: FakeYour2Service }
    ]
  }).compileComponents();  // compile template and css
}));

3
**

シンプルsoultion:輸入HttpModuleをとHttpClientModuleあなたのapp.module.ts

**

import { HttpClientModule } from '@angular/common/http';
import { HttpModule } from '@angular/http';



@NgModule({
 declarations: [
   AppComponent, videoComponent, tagDirective, 
 ],
 imports: [
  BrowserModule, routing, HttpClientModule, HttpModule

],
providers: [ApiServices],
bootstrap: [AppComponent]
})
export class AppModule { }

このソリューションは機能しますが、HttpModuleはAngular 5.2で非推奨とマークされています。一部のコンポーネントはアップグレードされておらず、依然として古いHttp実装を使用していると思います。
Sobvan

1

次のライブラリをツアーapp.module.tsに含め、インポートに含めるだけです。

import { HttpModule } from '@angular/http';

@NgModule({
  imports:    [ HttpModule ],
  declarations: [ AppComponent ],
  bootstrap:    [ AppComponent ]
})
export class AppModule { }

1

私はコードでこの問題に直面しました。このコードは私のapp.module.tsにのみ配置します。

import { HttpModule } from '@angular/http';

@NgModule({
  imports:      [ BrowserModule, HttpModule ],
  declarations: [ AppComponent ],
  bootstrap:    [ AppComponent ]
})
export class AppModule { }

1
既存の回答を繰り返さないでください。そうすることはコミュニティに価値を追加しません。
isherwood 2017

1

import { HttpModule } from '@angular/http'; module.tsファイルにパッケージ化し、インポートに追加します。


1

これらの両方をapp.module.tsに追加するだけです。

"import { HttpClientModule }    from '@angular/common/http'; 

import { HttpModule } from '@angular/http';"

これで問題なく動作します。...を追加することを忘れないでください

@NgModule => Imports:[] array

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.