Angular 2 Нет провайдера для Http

Я получаю EXCEPTION: No provider for Http! в моем Angular 2. Что я делаю неправильно?

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

В идеале вы разделите этот код на два отдельных файла. Для получения дополнительной информации читайте:

Ответ 2

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

Так как rc.5, вам нужно сделать что-то вроде

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

platformBrowserDynamic().bootstrapModule(AppModule);

Ответ 4

С выпуском Angular 2.0.0 от 14 сентября 2016 года вы все еще используете 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);

Ответ 5

потому что только в разделе комментариев я повторяю ответ от Эрика:

Мне пришлось включить HTTP_PROVIDERS

Ответ 6

Лучше всего изменить декоратор компонентов, добавив Http в массив поставщиков, как показано ниже.

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

Ответ 7

Добавьте HttpModule для импорта массива в файл app.module.ts, прежде чем использовать его.

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

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

Ответ 8

Вы должны включить Angular2 http в файл HTML, который импортирует компонент, который нуждается в http.

<script src="https://code.angularjs.org/2.0.0-alpha.46/http.dev.js"></script>

Ответ 9

с RC5 вам нужно импортировать HttpModule следующим образом:

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

затем включить HttpModule в массив импорта, как упомянуто выше Günter.

Ответ 10

Просто включите следующие библиотеки:

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

и включите класс http в раздел providers, как показано ниже:

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

Ответ 11

Импортируйте HttpModule в файл app.module.ts.

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

Также не забудьте объявить HttpModule под импортом, как показано ниже:

imports: [
    BrowserModule,
    HttpModule
  ],

Ответ 12

Если у вас есть эта ошибка в ваших тестах, вы должны создать 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
}));

Ответ 13

Solved : I faced this issue in my code, i only put this code in my app.module.ts

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

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