找不到“@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) {}
中所写
但是,由于您导入了 HttpModule
您需要将 constructor(private httpClient: Http)
注入为 @Maximus stated in the comments and @Pengyy in 。
有关 HttpModule
和 HttpClientModule
之间差异的更多信息,请查看
重要更新:
HttpModule
和 @angular/http
中的 Http
自 Angular V5 以来已被 弃用,应该使用 HttpClientModule
和 HttpClient
来自 @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.
我正在关注关于 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) {}
中所写
但是,由于您导入了 HttpModule
您需要将 constructor(private httpClient: Http)
注入为 @Maximus stated in the comments and @Pengyy in
有关 HttpModule
和 HttpClientModule
之间差异的更多信息,请查看
重要更新:
HttpModule
和 @angular/http
中的 Http
自 Angular V5 以来已被 弃用,应该使用 HttpClientModule
和 HttpClient
来自 @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.