找不到'@ angular/common/http'模块

mon*_*_za 53 node-modules angular

我正在关注Angular关于Http的这个基础教程.

正如可以在"设置:安装模块"部分中看到的那样,他们导入HttpClientModule,如下所示:

import {HttpClientModule} from '@angular/common/http';
Run Code Online (Sandbox Code Playgroud)

当我在我的项目中尝试这个时,我收到以下错误:"找不到模块'@ angular/common/http'".

我尝试导入以下模块,如下所示:

import { HttpModule } from '@angular/http';
Run Code Online (Sandbox Code Playgroud)

然后是我的进口部分:

imports: [
    HttpModule
],
Run Code Online (Sandbox Code Playgroud)

现在的问题是,我无法将此HttpModule注入我的服务对象,并且我收到以下错误:"找不到模块HttpModule".

这是我的服务类:

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

@Injectable()
export class FeedsService {
    constructor(private httpClient: HttpModule) {}
}
Run Code Online (Sandbox Code Playgroud)

我究竟做错了什么?

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

eko*_*eko 48

重要:HttpClientModule适用于Angular 4.3.0及更高版本.查看@Maximus的评论和@ Pengyy的 答案以获取更多信息.


原始答案:

您需要注入HttpClient组件/服务而不是模块.如果您导入HttpClientModule您的@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 {}
Run Code Online (Sandbox Code Playgroud)

所以改变

constructor(private httpClient: HttpModule) {}
Run Code Online (Sandbox Code Playgroud)

constructor(private httpClient: HttpClient) {}
Run Code Online (Sandbox Code Playgroud)

因为它已写在文档中:https://angular.io/guide/http#making-a-request-for-json-data


但是,因为您导入了HttpModule

你需要注入constructor(private httpClient: Http)作为@Maximus评价和陈述@Pengyy这个答案.

以及有关差别的更多信息HttpModule,并HttpClientModule检查这个答案:/sf/answers/3159090581/

  • @echonax,upvote我的下一次)只需编辑答案并添加有关httpClient和http的详细信息 (2认同)

Pen*_*gyy 35

重要更新:

HttpModuleHttp@angular/http已经废弃了,因为角V5,应使用HttpClientModuleHttpClient@angular/common/http而是指更新日志.


对于以前从**@4.3.0开始的 Angular版本,您应该Http从NgModule的导入数组中注入@angular/httpHttpModule导入.

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

@NgModule({
  ...
  imports: [HttpModule]
})
Run Code Online (Sandbox Code Playgroud)

注入http组件或服务

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

constructor(private http: Http) {}
Run Code Online (Sandbox Code Playgroud)

对于(包括)4.3.0之后的 Angular版本,您可以使用HttpClientfrom @angular/common/http而不是Httpfrom @angular/http.不要忘记先导入HttpClientModuleNgModule的导入阵列.

请参阅@ echonax的回答.

  • 看看[这个答案](/sf/answers/3159090581/),了解`Http`和`HttpClient"之间的区别 (2认同)