Exception angulaire: aucun fournisseur pour Http
Je reçois le EXCEPTION: No provider for Http!
dans mon application angulaire. Ce que je fais mal?
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'
})
});
16 réponses
Importer le HttpModule
import { HttpModule } from '@angular/http';
@NgModule({
imports: [ BrowserModule, HttpModule ],
providers: [],
declarations: [ AppComponent ],
bootstrap: [ AppComponent ]
})
export default class AppModule { }
platformBrowserDynamic().bootstrapModule(AppModule);
Idéalement, vous divisez ce code en deux fichiers distincts. Pour plus d'informations, lire:
>= Angulaire 4.3
Pour l'Introduction 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
Importer HttpModule
pour le module où vous l'utilisez (ici, par exemple, la AppModule
:
import { HttpModule } from '@angular/http';
@NgModule({
imports: [
BrowserModule,
FormsModule, // if used
HttpModule,
JsonpModule // if used
],
declarations: [ AppComponent ],
bootstrap: [ AppComponent ]
})
export class AppModule { }
L'importation du HttpModule
est assez similaire à l'ajout de HTTP_PROVIDERS
dans la version précédente.
Depuis rc.5 vous devez faire quelque chose comme
@NgModule({
imports: [ BrowserModule],
providers: [ HTTP_PROVIDERS ],
declarations: [ AppComponent ],
bootstrap: [ AppComponent ]
})
export default class AppModule { }
platformBrowserDynamic().bootstrapModule(AppModule);
Avec la version Angular 2.0.0 du 14 septembre 2016, vous utilisez toujours HttpModule. Votre app.module.ts
principal ressemblerait à ceci:
import { HttpModule } from '@angular/http';
@NgModule({
bootstrap: [ AppComponent ],
declarations: [ AppComponent ],
imports: [
BrowserModule,
HttpModule,
// ...more modules...
],
providers: [
// ...providers...
]
})
export class AppModule {}
Ensuite, dans votre app.ts
vous pouvez bootstrap en tant que tel:
import { platformBrowserDynamic } from '@angular/platform-browser-dynamic';
import { AppModule } from './app/main/app.module';
platformBrowserDynamic().bootstrapModule(AppModule);
Ajoutez HttpModule au tableau imports dans l'application .module.ts fichier avant de l'utiliser.
import { HttpModule } from '@angular/http';
@NgModule({
declarations: [
AppComponent,
CarsComponent
],
imports: [
BrowserModule,
HttpModule
],
providers: [],
bootstrap: [AppComponent]
})
export class AppModule { }
Parce que c'était seulement dans la section des commentaires, je répète la réponse D'Eric:
Je devais inclure HTTP_PROVIDERS
Le meilleur moyen est de changer le décorateur de votre composant en ajoutant Http dans le tableau des fournisseurs comme ci-dessous.
@Component({
selector: 'greetings-ac-app2',
providers: [Http],
templateUrl: 'app/greetings-ac2.html',
directives: [NgFor, NgModel, NgIf, FORM_DIRECTIVES],
pipes: []
})
Importez HttpModule
dans votre application.module.fichier ts.
import { HttpModule } from '@angular/http';
import { YourHttpTestService } from '../services/httpTestService';
Rappelez-vous également de déclarer HttpModule sous les importations comme ci-dessous:
imports: [
BrowserModule,
HttpModule
],
À partir de RC5, vous devez importer le HttpModule comme suit:
import { HttpModule } from '@angular/http';
Incluez ensuite le HttpModule dans le tableau imports comme mentionné ci-dessus par Günter.
Incluez simplement les bibliothèques suivantes:
import { HttpModule } from '@angular/http';
import { YourHttpTestService } from '../services/httpTestService';
Et incluez la classe http dans la section providers
, comme suit:
@Component({
selector: '...',
templateUrl: './test.html',
providers: [YourHttpTestService]
Si vous avez cette erreur dans vos tests, vous devez créer un faux Service pour tous les services:
Par exemple:
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; }
}
Et dans beforeEach:
beforeEach(async(() => {
TestBed.configureTestingModule({
providers: [
Your1Service,
Your2Service,
{ provide: Your1Service, useClass: FakeYour1Service },
{ provide: Your2Service, useClass: FakeYour2Service }
]
}).compileComponents(); // compile template and css
}));
**
Soultion Simple: importez le HttpModule et HttpClientModule sur votre application .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 { }
Tout ce que vous devez faire est d'inclure les bibliothèques suivantes en tournée app.module.ts et l'inclure également dans vos importations:
import { HttpModule } from '@angular/http';
@NgModule({
imports: [ HttpModule ],
declarations: [ AppComponent ],
bootstrap: [ AppComponent ]
})
export class AppModule { }
J'ai fait face à ce problème dans mon code. Je ne mets que ce code dans mon application.module.ts.
import { HttpModule } from '@angular/http';
@NgModule({
imports: [ BrowserModule, HttpModule ],
declarations: [ AppComponent ],
bootstrap: [ AppComponent ]
})
export class AppModule { }
import { HttpModule } from '@angular/http';
paquet dans votre module.fichier ts et ajoutez-le dans vos importations.
Je viens d'ajouter les deux dans mon application.module.ts:
"import { HttpClientModule } from '@angular/common/http';
&
import { HttpModule } from '@angular/http';"
Maintenant, il fonctionne bien.... Et n'oubliez pas d'ajouter dans le
@NgModule => Imports:[] array