Ich erhalte den 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'
})
});
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 hier:
> = Winkel 4,3
für die eingeführte 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
Importieren Sie HttpModule
in das Modul, in dem Sie es verwenden (hier zum Beispiel die 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 HttpModule
ähnelt dem Hinzufügen von HTTP_PROVIDERS
in früheren Versionen.
Seit rc.5 musst du sowas machen
@NgModule({
imports: [ BrowserModule],
providers: [ HTTP_PROVIDERS ],
declarations: [ AppComponent ],
bootstrap: [ AppComponent ]
})
export default class AppModule { }
platformBrowserDynamic().bootstrapModule(AppModule);
Mit der Version 2.0 von Angular 2.0 vom 14. September 2016 verwenden Sie noch HttpModule. Ihr app.module.ts
wü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 Sie in Ihrem app.ts
so bootstrap:
import { platformBrowserDynamic } from '@angular/platform-browser-dynamic';
import { AppModule } from './app/main/app.module';
platformBrowserDynamic().bootstrapModule(AppModule);
Fügen Sie HttpModule hinzu, um das Array in app.module.ts zu importieren, bevor Sie es verwenden.
import { HttpModule } from '@angular/http';
@NgModule({
declarations: [
AppComponent,
CarsComponent
],
imports: [
BrowserModule,
HttpModule
],
providers: [],
bootstrap: [AppComponent]
})
export class AppModule { }
weil es nur im Kommentarbereich war, wiederhole ich die Antwort von Eric:
Ich musste HTTP_PROVIDERS
angeben
Der beste Weg ist, den Dekorator Ihrer Komponente durch Hinzufügen von Http im Provider-Array zu ändern.
@Component({
selector: 'greetings-ac-app2',
providers: [Http],
templateUrl: 'app/greetings-ac2.html',
directives: [NgFor, NgModel, NgIf, FORM_DIRECTIVES],
pipes: []
})
Importieren Sie HttpModule
in Ihre app.module.ts-Datei.
import { HttpModule } from '@angular/http';
import { YourHttpTestService } from '../services/httpTestService';
Denken Sie auch daran, HttpModule unter Importen wie folgt anzugeben:
imports: [
BrowserModule,
HttpModule
],
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 wie folgt in den Abschnitt providers
ein:
@Component({
selector: '...',
templateUrl: './test.html',
providers: [YourHttpTestService]
ab RC5 müssen Sie das HttpModule wie folgt importieren:
import { HttpModule } from '@angular/http';
fügen Sie dann das HttpModule in das Import-Array ein, wie oben von Günter erwähnt.
**
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 { }
Wenn Sie diesen Fehler in Ihren Tests haben, sollten Sie einen Fake-Service für alle Services 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 in vorJedem:
beforeEach(async(() => {
TestBed.configureTestingModule({
providers: [
Your1Service,
Your2Service,
{ provide: Your1Service, useClass: FakeYour1Service },
{ provide: Your2Service, useClass: FakeYour2Service }
]
}).compileComponents(); // compile template and css
}));
Ich habe dieses Problem in meinem Code gesehen. Ich füge diesen Code nur in app.module.ts ein.
import { HttpModule } from '@angular/http';
@NgModule({
imports: [ BrowserModule, HttpModule ],
declarations: [ AppComponent ],
bootstrap: [ AppComponent ]
})
export class AppModule { }
import { HttpModule } from '@angular/http';
-Paket in Ihrer module.ts-Datei und fügen Sie es Ihren Importen hinzu.
Alles, was Sie tun müssen, ist, die folgenden Bibliotheken in tour app.module.ts aufzunehmen und in Ihre Importe aufzunehmen:
import { HttpModule } from '@angular/http';
@NgModule({
imports: [ HttpModule ],
declarations: [ AppComponent ],
bootstrap: [ AppComponent ]
})
export class AppModule { }
Ich füge beides einfach in meiner app.module.ts hinzu:
"import { HttpClientModule } from '@angular/common/http';
&
import { HttpModule } from '@angular/http';"
Nun funktioniert es gut .... Und vergessen Sie nicht, das zu ergänzen
@NgModule => Imports:[] array