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'
                })
            });
281
demandé sur Lazar Ljubenović 2015-11-15 18:15:21

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:

459
répondu Philip Miglinci 2017-11-07 17:14:48

>= 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.

38
répondu Günter Zöchbauer 2018-01-25 11:01:30

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);
9
répondu Adrian Ber 2016-08-23 13:28:54

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);
8
répondu Caleb 2016-09-17 22:17:21

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 { }
6
répondu Surendra Parchuru 2017-08-19 13:37:25

Parce que c'était seulement dans la section des commentaires, je répète la réponse D'Eric:

Je devais inclure HTTP_PROVIDERS

5
répondu daniel 2015-11-27 11:21:46

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: []
})
4
répondu Shivang Gupta 2016-09-25 15:19:47

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
  ],
4
répondu poo arasan 2017-07-25 01:24:00

À 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.

3
répondu mareks 2016-08-30 12:53:27

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]
3
répondu Enayat Rajabi 2017-04-26 18:55:26

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
}));
2
répondu Experimenter 2017-11-08 17:20:01
**

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 { }
2
répondu ngCourse 2018-01-25 10:57:43

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 { }
0
répondu fiza khan 2017-12-11 09:58:29

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 { }
0
répondu Saurabh 2017-12-12 20:42:48

import { HttpModule } from '@angular/http'; paquet dans votre module.fichier ts et ajoutez-le dans vos importations.

0
répondu Alekya 2018-08-16 08:03:30

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

0
répondu Dibya Prakash Das 2018-08-23 12:01:22