【问题标题】:Cannot find the '@angular/common/http' module找不到“@angular/common/http”模块
【发布时间】:2017-12-25 17:34:04
【问题描述】:

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

正如在“设置:安装模块”部分中看到的那样,他们导入 HttpClientModule 如下:

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

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

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

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

然后是我的导入部分:

imports: [
    HttpModule
],

现在的问题是,我无法将此 HttpModule 注入到我的服务对象中,并且出现以下错误:“找不到模块 HttpModule”。

这是我的服务类:

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

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

我做错了什么?

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

【问题讨论】:

  • 查看this answer了解HttpHttpClient之间的区别
  • 在 Angular 11 上我解决了这个问题,删除 node_modules 文件夹并运行 npm install

标签: angular node-modules


【解决方案1】:

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

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

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

所有这些都在app.module.ts 中。这是角度 11。

【讨论】:

    【解决方案2】:

    重要提示HttpClientModule 适用于 Angular 4.3.0 及更高版本。查看@Maximus' cmets 和@Pengyy's answer 了解更多信息。


    原答案:

    您需要在您的组件/服务而不是模块中注入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) 注入 cmets 中所述的@Maximusthis answer 中的@Pengyy

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

    【讨论】:

    • 这不起作用:如果我按照他们的教程进行操作,我将无法导入此内容: import {HttpClientModule} from '@angular/common/http';我没有那个 common/http 模块。我在哪里可以找到它
    • 只是Http - constructor(private httpClient: Http),因为他正在导入'@angular/http',而不是'@angular/common/http'
    • @monstertjie_za Maximus 是对的,您正在导入 HttpModule 但尝试使用 HttpClient 您需要选择 1
    • @Maximus 如果你写下答案,我会删除我的答案并为你的答案投票:)
    • @echonax,下次投我的票)只需编辑答案并添加有关 httpClient 和 http 的详细信息
    【解决方案3】:

    这个问题解决了吗?

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

    将我的 Angular 更新为 version=8 后

    【讨论】:

      【解决方案4】:

      参考这个: http: 弃用 @angular/http 以支持 @angular/common/http。

      【讨论】:

        【解决方案5】:

        重要更新:

        HttpModuleHttp 来自 @angular/http自 Angular V5 起被弃用,应该使用来自 @angular/common/httpHttpClientModuleHttpClient 代替,请参考 @987654321 @


        对于 **@4.3.0 之前的 Angular 版本,您应该从 @angular/http 注入 HttpHttpModule 用于在 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/httpHttpClient,而不是来自@angular/httpHttp。不要忘记先在NgModule 的导入数组中导入HttpClientModule

        参考@echonax 的回答。

        【讨论】:

        • 您是第一个发布对我有帮助的解决方案的人,谢谢。
        • @echonax 好的,模块在哪里,我找不到?
        • this answerHttpHttpClient之间的区别
        • @Maximus 太棒了!抱歉,我有一段时间没有关注更改日志。
        • @Pengyy,Angular 非常动态)
        【解决方案6】:

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

        重现步骤:

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

        ionic:(从终端/cmd 提示符运行 ionic info),检查版本并确保它们是最新的。您还可以查看项目中 package.json 文件夹中的 Angular 版本和包。

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

        【讨论】:

          【解决方案7】:

          当心自动导入。我的 HTTP_INTERCEPTORS 是这样自动导入的:

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

          而不是

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

          导致此错误的原因

          【讨论】:

            【解决方案8】:

            我在 Angular 5 中使用 http,这是一个问题。 使用 Httpclient 解决了这个问题。

            【讨论】:

            • 不一定是同一个版本。换成旧版本就可以了。
            • 我能够使用 Angular 5 让它工作。我想可能已经修复了一些错误。
            【解决方案9】:

            注意:这是针对@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);
            }
            

            【讨论】:

            • “Promise”类型上不存在“订阅”属性。
            【解决方案10】:

            您应该在服务中从@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');
            }
            

            【讨论】:

              猜你喜欢
              • 2018-11-10
              • 1970-01-01
              • 2018-01-23
              • 1970-01-01
              • 1970-01-01
              • 2023-03-20
              • 1970-01-01
              • 2022-11-10
              • 2017-01-02
              相关资源
              最近更新 更多