ChatGPT解决这个技术问题 Extra ChatGPT

角度例外:没有 Http 提供者

我在我的 Angular 应用程序中获得了 EXCEPTION: No provider for Http!。我究竟做错了什么?

import {Http, Headers} from 'angular2/http';
import {Injectable} from 'angular2/core'


@Component({
    selector: 'greetings-ac-app2',
    providers: [],
    templateUrl: 'app/greetings-ac2.html',
    directives: [NgFor, NgModel, NgIf, FORM_DIRECTIVES],
    pipes: []
})
export class GreetingsAcApp2 {
    private str:any;

    constructor(http: Http) {

        this.str = {str:'test'};

        http.post('http://localhost:18937/account/registeruiduser/',
            JSON.stringify(this.str),
            {
                headers: new Headers({
                    'Content-Type': 'application/json'
                })
            });
您缺少 HTTP_PROVIDERS
导入/导出...拜托,任何人,这是什么语法?
它是打字稿语法
导入/导出 - 它是 JavaScript 语法 (ES6)
如果其中一个答案能够真正解释为什么我们需要导入 HttpModule 以及它的作用,那就太好了。

E
Edric

导入 HttpModule

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

@NgModule({
    imports: [ BrowserModule, HttpModule ],
    providers: [],
    declarations: [ AppComponent ],
    bootstrap: [ AppComponent ]
})
export default class AppModule { }

platformBrowserDynamic().bootstrapModule(AppModule);

理想情况下,您将此代码拆分为两个单独的文件。欲了解更多信息,请阅读:

https://v2.angular.io/docs/ts/latest/cookbook/rc4-to-rc5.html

https://v2.angular.io/docs/ts/latest/guide/ngmodule.html


在当前的 Angular2 测试版中,该文件称为 app.ts
在 angular-cli 生成的项目中,该文件称为 main.ts
如果我没有 NgModule 怎么办?我正在开发一个 angular2 模块,它没有 NgModule 但对于测试我需要 Http 提供程序
@Webruster 我刚刚检查过。它应该仍然有效。你能给我确切的错误代码吗?
@PhilipMiglinci ...感谢您的宝贵回答..为寻求者添加一些观点,即该文件将是 angular 2.0 中的 app.module.ts 以进行解释,这是项目的核心文件,其中包含将使用进一步继承的模块类。
G
Günter Zöchbauer

>= 角 4.3

对于介绍的 HttpClientModule

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

@NgModule({
  imports: [
    BrowserModule,
    FormsModule, // if used
    HttpClientModule,
    JsonpModule // if used
  ],
  declarations: [ AppComponent ],
  bootstrap:    [ AppComponent ]
})
export class AppModule { }

Angular2 >= RC.5

HttpModule 导入您使用它的模块(例如 AppModule

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

@NgModule({
  imports: [
    BrowserModule,
    FormsModule, // if used
    HttpModule,
    JsonpModule // if used
  ],
  declarations: [ AppComponent ],
  bootstrap:    [ AppComponent ]
})
export class AppModule { }

导入 HttpModule 与在以前的版本中添加 HTTP_PROVIDERS 非常相似。


C
Caleb

在 2016 年 9 月 14 日发布的 Angular 2.0.0 中,您仍在使用 HttpModule。您的主要 app.module.ts 看起来像这样:

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

@NgModule({
   bootstrap: [ AppComponent ],
   declarations: [ AppComponent ],
   imports: [
      BrowserModule,
      HttpModule,
      // ...more modules...
   ],
   providers: [
      // ...providers...
   ]
})
export class AppModule {}

然后在您的 app.ts 中,您可以这样引导:

import { platformBrowserDynamic } from '@angular/platform-browser-dynamic';
import { AppModule } from './app/main/app.module';

platformBrowserDynamic().bootstrapModule(AppModule);

S
Surendra Parchuru

在使用之前将 HttpModule 添加到 app.module.ts 文件中的导入数组中。

从“@angular/http”导入 { HttpModule }; @NgModule({ 声明:[ AppComponent, CarsComponent ],导入:[ BrowserModule,HttpModule ],提供者:[],引导程序:[AppComponent] }) 导出类 AppModule { }


C
C_Ogoo

由于 rc.5 你必须做类似的事情

@NgModule({
    imports: [ BrowserModule],
    providers: [ HTTP_PROVIDERS ],  
    declarations: [ AppComponent ],
    bootstrap: [ AppComponent ]
})
export default class AppModule { }

platformBrowserDynamic().bootstrapModule(AppModule);

d
daniel

因为它只是在评论部分我重复埃里克的回答:

我必须包括 HTTP_PROVIDERS


...另外,HTTP_PROVIDERS 已被贬值。它现在称为 HttpModule.. stackoverflow.com/questions/38903607/…
M
Mwiza

在您的 app.module.ts 文件中导入 HttpModule

import { HttpModule } from '@angular/http';
import { YourHttpTestService } from '../services/httpTestService';

还记得在导入下声明 HttpModule,如下所示:

imports: [
    BrowserModule,
    HttpModule
  ],

S
Shivang Gupta

最好的方法是通过在 providers 数组中添加 Http 来更改组件的装饰器,如下所示。

@Component({
    selector: 'greetings-ac-app2',
    providers: [Http],
    templateUrl: 'app/greetings-ac2.html',
    directives: [NgFor, NgModel, NgIf, FORM_DIRECTIVES],
    pipes: []
})

谁标错了,请问是什么原因?
我没有投反对票,但原因可能是您不希望每个组件都有一个新的 Http 对象。最好有一个应用程序,这是通过在 NgModule 级别导入它来完成的。
m
mareks

从 RC5 开始,您需要像这样导入 HttpModule:

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

然后将 HttpModule 包含在 Günter 上面提到的导入数组中。


E
Enayat

只需包含以下库:

import { HttpModule } from '@angular/http';
import { YourHttpTestService } from '../services/httpTestService';

并在 providers 部分中包含 http 类,如下所示:

@Component({
  selector: '...',
  templateUrl: './test.html',
  providers: [YourHttpTestService]

E
Experimenter

如果您在测试中遇到此错误,您应该为所有服务创建 Fake Service:

例如:

import { YourService1 } from '@services/your1.service';
import { YourService2 } from '@services/your2.service';

class FakeYour1Service {
 public getSomeData():any { return null; }
}

class FakeYour2Service {
  public getSomeData():any { return null; }
}

在 beforeEach 中:

beforeEach(async(() => {
  TestBed.configureTestingModule({
    providers: [
      Your1Service,
      Your2Service,
      { provide: Your1Service, useClass: FakeYour1Service },
      { provide: Your2Service, useClass: FakeYour2Service }
    ]
  }).compileComponents();  // compile template and css
}));

S
Shashwat Gupta
**

简单的解决方案:在您的 app.module.ts 上导入 HttpModule 和 HttpClientModule

**

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



@NgModule({
 declarations: [
   AppComponent, videoComponent, tagDirective, 
 ],
 imports: [
  BrowserModule, routing, HttpClientModule, HttpModule

],
providers: [ApiServices],
bootstrap: [AppComponent]
})
export class AppModule { }

此解决方案有效,但 HttpModule 在 Angular 5.2 中被标记为已弃用。我认为有些组件没有升级,仍然使用旧的 Http 实现。
f
fiza khan

您需要做的就是在 tour app.module.ts 中包含以下库,并将其包含在您的导入中:

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

@NgModule({
  imports:    [ HttpModule ],
  declarations: [ AppComponent ],
  bootstrap:    [ AppComponent ]
})
export class AppModule { }

i
isherwood

我在我的代码中遇到了这个问题。我只将此代码放在我的 app.module.ts 中。

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

@NgModule({
  imports:      [ BrowserModule, HttpModule ],
  declarations: [ AppComponent ],
  bootstrap:    [ AppComponent ]
})
export class AppModule { }

请不要重复现有的答案。这样做不会为社区增加价值。
A
Alekya

import { HttpModule } from '@angular/http'; 在您的 module.ts 文件中打包并将其添加到您的导入中。


D
Dibya Prakash Das

我只是在我的 app.module.ts 中添加这两个:

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

&

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

现在它工作正常......并且不要忘记添加

@NgModule => Imports:[] array


关注公众号,不定期副业成功案例分享
关注公众号

不定期副业成功案例分享

领先一步获取最新的外包任务吗?

立即订阅