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'
})
});
#1 楼
导入HttpModule import { HttpModule } from '@angular/http';
@NgModule({
imports: [ BrowserModule, HttpModule ],
providers: [],
declarations: [ AppComponent ],
bootstrap: [ AppComponent ]
})
export default class AppModule { }
platformBrowserDynamic().bootstrapModule(AppModule);
理想情况下,您将此代码分成两个单独的文件。 br />有关更多信息,请阅读:
https://v2.angular.io/docs/ts/latest/cookbook/rc4-to-rc5.html
https ://v2.angular.io/docs/ts/latest/guide/ngmodule.html
评论
在当前的Angular2 beta中,该文件称为app.ts。
–d135-1r43
16年4月20日在13:05
在angular-cli生成的项目中,该文件称为main.ts。
–filoxo
16年5月16日在16:33
如果我没有NgModule怎么办?我正在开发angular2模块,它没有NgModule,但是对于测试,我需要Http provider
– iRaS
16-10-7在6:03
我刚刚检查的@Webruster。它仍然应该工作。您能给我确切的错误代码吗?
–菲利普
17年6月11日在9:24
@PhilipMiglinci ...感谢您提供宝贵的答案..为寻求者提供了一些要点,该文件将是angular 2.0中的app.module.ts,以解释这是该项目的核心文件,其中包括将使用进一步继承的模块类。
–陕戈拉
17-09-23在17:40
#2 楼
> = Angular 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
。#3 楼
在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);
#4 楼
在使用HttpModule之前,将其添加到app.module.ts文件中的import数组。 import { HttpModule } from '@angular/http';
@NgModule({
declarations: [
AppComponent,
CarsComponent
],
imports: [
BrowserModule,
HttpModule
],
providers: [],
bootstrap: [AppComponent]
})
export class AppModule { }
#5 楼
从rc.5开始,您必须做类似 @NgModule({
imports: [ BrowserModule],
providers: [ HTTP_PROVIDERS ],
declarations: [ AppComponent ],
bootstrap: [ AppComponent ]
})
export default class AppModule { }
platformBrowserDynamic().bootstrapModule(AppModule);
#6 楼
因为它仅在评论部分,所以我重复了Eric的回答:我必须添加
HTTP_PROVIDERS
评论
...另外,HTTP_PROVIDERS已被淘汰。现在称为HttpModule ..stackoverflow.com/questions/38903607/…
–迈克·格莱德希尔(Mike Gledhill)
17年9月9日在9:53
#7 楼
在您的app.module.ts文件中导入HttpModule
。import { HttpModule } from '@angular/http';
import { YourHttpTestService } from '../services/httpTestService';
也请记住在如下所示的导入下声明HttpModule:
imports: [
BrowserModule,
HttpModule
],
#8 楼
最好的方法是通过在Providers数组中添加Http来更改组件的装饰器,如下所示。@Component({
selector: 'greetings-ac-app2',
providers: [Http],
templateUrl: 'app/greetings-ac2.html',
directives: [NgFor, NgModel, NgIf, FORM_DIRECTIVES],
pipes: []
})
评论
谁曾将其标记为错误,请问原因是什么?
– Shivang Gupta
16-9-29在4:45
我没有投票,但是原因可能是您不想为每个组件都使用新的Http对象。最好为该应用程序创建一个应用程序,这是通过在NgModule级别上导入来完成的。
–特德·霍普(Ted Hopp)
16 Dec 4'在7:02
#9 楼
从RC5开始,您需要像这样导入HttpModule:import { HttpModule } from '@angular/http';
然后将HttpModule包括在Günter提到的imports数组中。
#10 楼
只需包含以下库:import { HttpModule } from '@angular/http';
import { YourHttpTestService } from '../services/httpTestService';
,并在
providers
部分中包含http类,如下所示:@Component({
selector: '...',
templateUrl: './test.html',
providers: [YourHttpTestService]
#11 楼
如果您在测试中遇到此错误,则应为所有服务创建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
}));
#12 楼
**
简单的灵魂:在您的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 { }
评论
此解决方案有效,但是Angular 5.2中将HttpModule标记为已弃用。我认为某些组件未升级,仍然使用旧的Http实现。
– Sobvan
18 Mar 16 '18在20:09
#13 楼
您需要做的就是在游览app.module.ts中包含以下库,并将其包含在导入中:import { HttpModule } from '@angular/http';
@NgModule({
imports: [ HttpModule ],
declarations: [ AppComponent ],
bootstrap: [ AppComponent ]
})
export class AppModule { }
#14 楼
我在代码中遇到了这个问题。我只将此代码放在我的app.module.ts中。import { HttpModule } from '@angular/http';
@NgModule({
imports: [ BrowserModule, HttpModule ],
declarations: [ AppComponent ],
bootstrap: [ AppComponent ]
})
export class AppModule { }
评论
请不要重复现有的答案。这样做不会为社区增加价值。
–艾舍伍德
17年12月12日在20:44
#15 楼
将import { HttpModule } from '@angular/http';
软件包放在module.ts文件中,并将其添加到导入中。#16 楼
我将它们都添加到我的app.module.ts中:"import { HttpClientModule } from '@angular/common/http';
&
import { HttpModule } from '@angular/http';"
现在其效果很好....
并且不要忘记添加
@NgModule => Imports:[] array
评论
您缺少HTTP_PROVIDERS。导入/导出...大家,这是什么语法?
是打字稿语法
导入/导出-这是JavaScript语法(ES6)
如果其中一个答案能真正解释为什么我们需要导入HttpModule及其作用,那将是很好的。