Angular AUSNAHME: Kein Anbieter für HTTP


333

Ich bekomme das EXCEPTION: No provider for Http!in meiner Angular App. Was mache ich falsch?

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
Du vermisst HTTP_PROVIDERS.
Eric Martinez

1
Import / Export ... bitte, jemand, welche Syntax ist das?
vp_arth

5
Es ist Typescript Syntax
Daniel

10
Import / Export - es ist JavaScript-Syntax (ES6)
Alexpods

3
Es wäre schön, wenn eine der Antworten tatsächlich erklären würde, warum wir importieren HttpModulemüssen und was es tut.
Drazen Bjelovuk

Antworten:


520

Importieren Sie das HttpModule

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

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

platformBrowserDynamic().bootstrapModule(AppModule);

Idealerweise teilen Sie diesen Code in zwei separate Dateien auf. Weitere Informationen finden Sie unter:


2
In der aktuellen Beta von Angular2 wird die Datei aufgerufen app.ts.
d135-1r43

7
In Angular-Cli-generierten Projekten wird die Datei aufgerufen main.ts.
Filoxo

Was ist, wenn ich kein NgModule habe? Ich entwickle ein angle2-Modul und es hat kein NgModule, aber für Tests brauche ich einen HTTP-Anbieter
iRaS

@Webruster habe ich gerade überprüft. Es sollte immer noch funktionieren. Können Sie mir den genauen Fehlercode geben?
Philip

2
@PhilipMiglinci ... danke für die wertvolle Antwort .. Hinzufügen einiger Punkte für die Suchenden, dass die Datei app.module.ts in Winkel 2.0 sein würde, um zu erklären, dass dies die Kerndatei für das Projekt ist, um die Module einzuschließen, die weiter vererbt werden Klassen.
Shaan Gola

56

> = Winkel 4.3

für die eingeführten HttpClientModule

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

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

Winkel2> = RC.5

Importieren Sie HttpModulein das Modul, in dem Sie es verwenden (hier zum Beispiel AppModule:

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

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

Das Importieren von HttpModuleist dem Hinzufügen HTTP_PROVIDERSin der vorherigen Version ziemlich ähnlich .


9

Mit der Angular 2.0.0-Version vom 14. September 2016 verwenden Sie weiterhin HttpModule. Ihr Haupt app.module.tswürde ungefähr so ​​aussehen:

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

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

Dann können app.tsSie in Ihrem Bootstrap als solches:

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

platformBrowserDynamic().bootstrapModule(AppModule);

9

Fügen Sie HttpModule zum Importieren des Arrays in der Datei app.module.ts hinzu , bevor Sie es verwenden.

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

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


9

Seit rc.5 muss man so etwas machen

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

platformBrowserDynamic().bootstrapModule(AppModule);


5

Importieren Sie HttpModulein Ihre Datei app.module.ts.

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

Denken Sie auch daran, HttpModule unter den folgenden Importen zu deklarieren:

imports: [
    BrowserModule,
    HttpModule
  ],

4

Der beste Weg ist, den Dekorator Ihrer Komponente zu ändern, indem Sie Http wie unten im Provider-Array hinzufügen.

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

Wer hat es falsch markiert? Darf ich wissen, was der Grund ist?
Shivang Gupta

5
Ich habe nicht abgelehnt, aber der Grund ist wahrscheinlich, dass Sie nicht Httpfür jede Komponente ein neues Objekt möchten . Es ist besser, eine einzige für die App zu haben, was durch Importieren auf der NgModuleEbene erreicht wird.
Ted Hopp

3

Ab RC5 müssen Sie das HttpModule wie folgt importieren:

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

Nehmen Sie dann das HttpModule in das Import-Array auf, wie oben von Günter erwähnt.


3

Fügen Sie einfach die folgenden Bibliotheken hinzu:

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

und fügen Sie die http-Klasse providerswie folgt in den Abschnitt ein:

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

3

Wenn Sie diesen Fehler in Ihren Tests haben, sollten Sie einen gefälschten Dienst für alle Dienste erstellen:

Zum Beispiel:

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; }
}

Und vor jedem:

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

3
**

Einfache Lösung: Importieren Sie das HttpModule und das HttpClientModule in Ihre 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 { }

Diese Lösung funktioniert, aber HttpModule ist in Angular 5.2 als veraltet markiert. Ich denke, einige Komponenten werden nicht aktualisiert und verwenden immer noch die alte HTTP-Implementierung.
Sobvan

1

Alles, was Sie tun müssen, ist, die folgenden Bibliotheken in tour app.module.ts aufzunehmen und sie auch in Ihre Importe aufzunehmen:

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

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

1

Ich habe dieses Problem in meinem Code festgestellt. Ich habe diesen Code nur in meine app.module.ts eingefügt.

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

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

1
Bitte wiederholen Sie vorhandene Antworten nicht. Dies bringt keinen Mehrwert für die Community.
Isherwood

1

import { HttpModule } from '@angular/http'; Paket in Ihrer module.ts-Datei und fügen Sie es in Ihren Importen hinzu.


1

Ich füge einfach beide in meine app.module.ts ein:

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

&

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

Jetzt funktioniert es gut .... Und vergessen Sie nicht, das hinzuzufügen

@NgModule => Imports:[] array

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.