Angular EXCEPTION:没有Http的提供者

时间:2015-11-15 15:15:22

标签: angular

我在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'
                })
            });

16 个答案:

答案 0 :(得分:493)

导入HttpModule

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

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

platformBrowserDynamic().bootstrapModule(AppModule);

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

答案 1 :(得分:50)

> = Angular 4.3

引入了.csv

HttpClientModule

Angular2> = RC.5

import { HttpClientModule } from '@angular/common/http'; @NgModule({ imports: [ BrowserModule, FormsModule, // if used HttpClientModule, JsonpModule // if used ], declarations: [ AppComponent ], bootstrap: [ AppComponent ] }) export class AppModule { } 导入您使用它的模块(例如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非常相似。

答案 2 :(得分:9)

由于 rc.5 ,您必须执行类似

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

platformBrowserDynamic().bootstrapModule(AppModule);

答案 3 :(得分:9)

使用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 :(得分:8)

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



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

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




答案 5 :(得分:6)

因为它只在评论部分重复了Eric的回答:

我必须包含HTTP_PROVIDERS

答案 6 :(得分:5)

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

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

还记得在下面的导入下声明HttpModule:

imports: [
    BrowserModule,
    HttpModule
  ],

答案 7 :(得分:4)

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

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

答案 8 :(得分:3)

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

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

然后在Günter上面提到的进口数组中包含HttpModule。

答案 9 :(得分:3)

只需包含以下库:

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

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

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

答案 10 :(得分:2)

如果测试中出现此错误,则应为所有服务创建虚假服务:

例如:

 Customers     | Main Location
---------------+---------------
 Somebody      | 1
 somebody else | 1
 Someone       | something
 someone else  | 1
 0             | 1
               | 1

在之前的每个人:

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; }
}

答案 11 :(得分:2)

**
  

简单的灵魂:在 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 { }

答案 12 :(得分:0)

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

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

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

答案 13 :(得分:0)

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

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

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

答案 14 :(得分:0)

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

答案 15 :(得分:0)

我只需将这两个都添加到我的app.module.ts中:

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

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

现在可以正常工作了...。 并且不要忘记添加

@NgModule => Imports:[] array