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