找不到“@angular/common/http”模块

Cannot find the '@angular/common/http' module

我正在关注关于 Angular 关于 Http 的 this 基础教程。

正如在 "Setup: Installing the module" 部分中看到的那样,他们按如下方式导入 HttpClientModule:

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

当我在我的项目中尝试这样做时,出现以下错误:"Cannot find module '@angular/common/http'"。

我试过导入以下模块,如下:

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

然后是我的导入部分:

imports: [
    HttpModule
],

现在的问题是,我无法将此 HttpModule 注入到我的服务对象中,并且出现以下错误:"Cannot find module HttpModule".

这是我的服务class:

import { Injectable, OnInit } from '@angular/core';
//Custom Models
import { Feed } from '../Models/Feed';

@Injectable()
export class FeedsService {
    constructor(private httpClient: HttpModule) {}
}

我做错了什么?

更新 当我意识到我无法按照教程导入模块时,我应该做的就是使用 运行 npm update 命令来更新我所有的包。

重要HttpClientModule 适用于 Angular 4.3.0 及更高版本。查看 @Maximus' comments and @Pengyy's 了解更多信息。


原答案:

您需要在 component/service 而不是模块中注入 HttpClient。如果您在 @NgModule

中导入 HttpClientModule
// 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 {}

所以改变

constructor(private httpClient: HttpModule) {}

constructor(private httpClient: HttpClient) {}

正如 documentation

中所写

但是,由于您导入了 HttpModule

您需要将 constructor(private httpClient: Http) 注入为 @Maximus stated in the comments and @Pengyy in

有关 HttpModuleHttpClientModule 之间差异的更多信息,请查看

重要更新:

HttpModule@angular/http 中的 Http 自 Angular V5 以来已被 弃用,应该使用 HttpClientModuleHttpClient 来自 @angular/common/http,请参考 CHANGELOG.


对于来自 **@4.3.0 的 Angular 版本 ,您应该从 @angular/http 注入 Http,并且 HttpModule 用于在 NgModule 的导入数组中导入。

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

@NgModule({
  ...
  imports: [HttpModule]
})

在组件或服务中注入 http

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

constructor(private http: Http) {}

对于 Angular 版本 (包括)4.3.0 之后,您可以使用 @angular/common/http 中的 HttpClient 而不是 Http 来自 @angular/http。不要忘记首先在 NgModule 的导入数组中导入 HttpClientModule

参考@echonax的回答。

您应该在您的服务中从 @angular/http 导入 http

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

注意:这是针对@angular/http,而不是@angular/common/http!

只需以这种方式导入,即可完美运行:

// 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: [... ]
})

然后你在 service.ts 中构建这样的:

constructor(private http: Http) { }

getmyClass(): Promise<myClass[]> {
  return this.http.get(URL)
             .toPromise()
             .then(response => response.json().data as myClass[])
             .catch(this.handleError);
}

我在 angular 5 中使用 http 时遇到了问题。 使用 Httpclient 解决了这个问题。

小心汽车进口。我的 HTTP_INTERCEPTORS 是这样自动导入的:

import { HTTP_INTERCEPTORS } from '@angular/common/http/src/interceptor';

而不是

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

导致此错误的原因

对于使用 Ionic 3 和 Angular 5 的任何人,我都会弹出相同的错误,但我在这里没有找到任何解决方案。但我确实找到了一些对我有用的步骤。

重现步骤:

  • npm 安装-g cordova ionic
  • ionic 启动 myApp 选项卡
  • cd myApp
  • cd node_modules/angular/common(不存在 http 模块)。

ionic:(运行 来自 terminal/cmd 提示的离子信息),检查版本并确保它们是最新的。您还可以检查项目中 package.json 文件夹中的 angular 版本和包。

我检查了我的依赖项和包并安装了 cordova。重新启动原子,错误消失了。希望这对您有所帮助!

参考这个: http: 弃用 @angular/http 取而代之的是 @angular/common/http.

这个问题解决了吗

我收到此错误: node_modules/ngx-restangular/lib/ngx-restangular-http.d.ts(3,27) 中的错误:错误 TS2307:找不到模块“@angular/common/http/src/response”。

将我的angular更新到版本=8

之后

这里的答案又一次过时了。要解决这个问题,我必须这样做:

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

...
@NgModule({
    imports: [
        HttpClientModule
    ],
    declarations: [],
    providers: [
        HttpClient
    ],

所有这些都在 app.module.ts 内。这是 angular 11.