Je suis ceci tutoriel fondamental sur Angular à propos de Http.
Comme on peut le voir dans la section "Installation: Installation du module", ils importent le HttpClientModule comme suit:
import {HttpClientModule} from '@angular/common/http';
Lorsque j'essaie cela dans mon projet, le message d'erreur suivant s'affiche: "Impossible de trouver le module '@ angular/common/http'".
J'ai essayé d'importer le module suivant, comme suit:
import { HttpModule } from '@angular/http';
Et puis ma section des importations:
imports: [
HttpModule
],
Le problème est maintenant, je ne peux pas injecter ce HttpModule dans mon objet service et j'obtiens le message d'erreur suivant: "Impossible de trouver le module HttpModule".
Voici ma classe de service:
import { Injectable, OnInit } from '@angular/core';
//Custom Models
import { Feed } from '../Models/Feed';
@Injectable()
export class FeedsService {
constructor(private httpClient: HttpModule) {}
}
Qu'est-ce que je fais mal?
Mise à jour Tout ce que j’aurais dû faire lorsque j’ai réalisé que je ne pouvais pas importer le module conformément au tutoriel, c’était d’exécuter la commande npm update
, mettre à jour tous mes paquets.
Important : HttpClientModule
est pour Angular 4.3.0 et supérieur. Vérifiez @ Maximus ' commentaires et @ Pengyy réponse pour plus d'informations.
Vous devez injecter HttpClient
dans votre composant/service et non dans le module. Si vous importez HttpClientModule
dans votre @NgModule
// app.module.ts:
import {NgModule} from '@angular/core';
import {BrowserModule} from '@angular/platform-browser';
// Import HttpClientModule from @angular/common/http
import {HttpClientModule} from '@angular/common/http';
@NgModule({
imports: [
BrowserModule,
// Include it under 'imports' in your application module
// after BrowserModule.
HttpClientModule,
],
})
export class MyAppModule {}
Alors change
constructor(private httpClient: HttpModule) {}
à
constructor(private httpClient: HttpClient) {}
comme il a été écrit dans la documentation: https://angular.io/guide/http#making-a-request-for-json-data
Cependant, depuis que vous avez importé le HttpModule
vous devez injecter constructor(private httpClient: Http)
comme @ Maximus indiqué dans les commentaires et @ Pengyy dans cette réponse .
Et pour plus d'informations sur les différences entre HttpModule
et HttpClientModule
, vérifiez cette réponse: https://stackoverflow.com/a/45129865/570629
Mise à jour importante:
HttpModule
et Http
de @angular/http
a été déconseillé depuis Angular V5 , devrait être en utilisant HttpClientModule
et HttpClient
de @angular/common/http
à la place, reportez-vous à CHANGELOG.
Pour Angular version précédente de ** @ 4.3.0 , vous devez injecter Http
de @angular/http
et HttpModule
est destiné à l'importation sur le tableau d'importation de votre NgModule.
import {HttpModule} from '@angular/http';
@NgModule({
...
imports: [HttpModule]
})
Injecter http
au composant ou au service
import { Http } from '@angular/http';
constructor(private http: Http) {}
Pour Angular version après (include) 4.3.0 , vous pouvez utiliser HttpClient
à partir de @angular/common/http
à la place. de Http
de @angular/http
. N'oubliez pas d'importer d'abord HttpClientModule
sur le tableau d'importation de votre NgModule
.
Reportez-vous à la réponse de @ echonax.
Importez simplement de cette manière, fonctionne parfaitement:
// Import HttpModule from @angular/http
import {HttpModule} from '@angular/http';
@NgModule({
declarations: [
MyApp,
HelloIonicPage,
ItemDetailsPage,
ListPage
],
imports: [
BrowserModule,
HttpModule,
IonicModule.forRoot(MyApp),
],
bootstrap: [...],
entryComponents: [...],
providers: [... ]
})
et puis vous construisez dans le service.ts comme ceci:
constructor(private http: Http) { }
getmyClass(): Promise<myClass[]> {
return this.http.get(URL)
.toPromise()
.then(response => response.json().data as myClass[])
.catch(this.handleError);
}
Méfiez-vous des importations automatiques. Mon HTTP_INTERCEPTORS a été importé automatiquement comme ceci:
import { HTTP_INTERCEPTORS } from '@angular/common/http/src/interceptor';
au lieu de
import { HTTP_INTERCEPTORS } from '@angular/common/http';
qui a causé cette erreur
J'utilisais http dans angular 5, ce qui posait un problème. L'utilisation de Httpclient a résolu le problème.
Pour ceux qui utilisaient Ionic 3 et Angular 5, le même message d'erreur s'affichait et je n'ai trouvé aucune solution ici. Mais j'ai trouvé des étapes qui ont fonctionné pour moi.
Étapes à suivre pour reproduire:
ionique: (exécutez ionic informations à partir d'un terminal/invite cmd), vérifiez les versions et assurez-vous qu'elles sont à jour. Vous pouvez également vérifier les versions et les packages angular dans le dossier package.json de votre projet.
J'ai vérifié mes dépendances et mes paquets et installé Cordova. Redémarré atom et l'erreur a disparu. J'espère que cela t'aides!
Ce problème est-il résolu?.
Je reçois cette erreur: ERREUR dans node_modules/ngx-restangular/lib/ngx-restangular-http.d.ts (3,27): erreur TS2307: impossible de trouver le module '@ angulaire/commun/http/src/réponse'.
Après la mise à jour de mon angular vers la version = 8
Vous devez importer http
de @angular/http
dans votre service:
import {Http} from '@angular/http';
constructor(private http: http) {} // <--Then Inject it here
// now you can use it in any function eg:
getUsers() {
return this.http.get('whateverURL');
}
Reportez-vous à ceci: http: deprecate @ angular/http en faveur de @ angular/common/http.