Pengecualian Angular: Tidak ada penyedia untuk Http

333

Saya mendapatkan EXCEPTION: No provider for Http!di aplikasi Angular saya. Apa yang saya lakukan salah?

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'
                })
            });
daniel
sumber
3
Anda hilang HTTP_PROVIDERS.
Eric Martinez
1
impor / ekspor ... tolong, siapa saja, sintaks apa ini?
vp_arth
5
Ini adalah Sintaks Script
daniel
10
impor / ekspor - ini sintaksis JavaScript (ES6)
alexpods
3
Alangkah baiknya jika salah satu jawaban benar-benar menjelaskan mengapa kita perlu mengimpor HttpModule, dan apa fungsinya.
Drazen Bjelovuk

Jawaban:

520

Impor HttpModule

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

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

platformBrowserDynamic().bootstrapModule(AppModule);

Idealnya, Anda membagi kode ini menjadi dua file terpisah. Untuk informasi lebih lanjut baca:

Philip
sumber
2
Dalam Angular2 beta saat ini file tersebut dipanggil app.ts.
d135-1r43
7
Dalam proyek-proyek yang dihasilkan oleh sudut, file disebut main.ts.
filoxo
bagaimana jika saya tidak memiliki NgModule? Saya sedang mengembangkan modul angular2 dan tidak memiliki NgModule tetapi untuk tes saya perlu penyedia Http
iRaS
@ Webrus saya baru saja memeriksa. Itu masih harus bekerja. Bisakah Anda memberi saya kode kesalahan yang tepat?
Philip
2
@PhilipMiglinci ... terima kasih atas jawaban yang berharga .. menambahkan beberapa poin bagi para pencari bahwa file tersebut akan menjadi app.module.ts dalam sudut 2.0 untuk penjelasan ini adalah file inti untuk proyek untuk memasukkan modul yang akan menggunakan lebih lanjut warisan kelas.
shaan gola
56

> = Angular 4.3

untuk yang diperkenalkan 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

Impor HttpModuleke modul tempat Anda menggunakannya (di sini misalnya AppModule:

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

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

Mengimpor HttpModulesangat mirip dengan menambahkan HTTP_PROVIDERSdi versi sebelumnya.

Günter Zöchbauer
sumber
9

Dengan rilis 14 September 2016 Angular 2.0.0, Anda menggunakan masih menggunakan HttpModule. Utama Anda app.module.tsakan terlihat seperti ini:

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

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

Kemudian di Anda, app.tsAnda dapat bootstrap seperti:

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

platformBrowserDynamic().bootstrapModule(AppModule);
Caleb
sumber
9

Tambahkan HttpModule untuk mengimpor array di file app.module.ts sebelum Anda menggunakannya.

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

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

Surendra Parchuru
sumber
9

Sejak rc.5 Anda harus melakukan sesuatu seperti

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

platformBrowserDynamic().bootstrapModule(AppModule);
Adrian Ber
sumber
6

karena itu hanya di bagian komentar saya ulangi jawaban dari Eric:

Saya harus memasukkan HTTP_PROVIDERS

daniel
sumber
2
... Plus, HTTP_PROVIDERS telah didepresiasi. Sekarang disebut HttpModule .. stackoverflow.com/questions/38903607/…
Mike Gledhill
5

Impor HttpModuledalam file app.module.ts Anda.

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

Juga ingat untuk mendeklarasikan HttpModule di bawah impor seperti di bawah ini:

imports: [
    BrowserModule,
    HttpModule
  ],
kotoran arasan
sumber
4

Cara terbaik adalah mengubah dekorator komponen Anda dengan menambahkan Http di array penyedia seperti di bawah ini.

@Component({
    selector: 'greetings-ac-app2',
    providers: [Http],
    templateUrl: 'app/greetings-ac2.html',
    directives: [NgFor, NgModel, NgIf, FORM_DIRECTIVES],
    pipes: []
})
Shivang Gupta
sumber
Siapa yang salah menandainya, Boleh saya tahu apa alasannya?
Shivang Gupta
5
Saya tidak mengundurkan diri, tetapi alasannya mungkin karena Anda tidak ingin Httpobjek baru untuk setiap komponen. Lebih baik memiliki satu untuk aplikasi, yang dicapai dengan mengimpornya di NgModuletingkat.
Ted Hopp
3

per RC5 Anda perlu mengimpor HttpModule seperti:

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

kemudian sertakan HttpModule dalam array impor sebagaimana disebutkan di atas oleh Günter.

mareks
sumber
3

Cukup sertakan perpustakaan berikut:

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

dan sertakan kelas http di providersbagian, sebagai berikut:

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

Jika Anda memiliki kesalahan ini dalam pengujian Anda, Anda harus membuat Layanan Palsu untuk semua layanan:

Sebagai contoh:

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

Dan di hadapanEach:

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

Simple soultion: Impor HttpModule dan HttpClientModule di app.module.ts Anda

**

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 { }
Shashwat Gupta
sumber
Solusi ini berfungsi, tetapi HttpModule ditandai sebagai usang dalam Angular 5.2. Saya pikir beberapa komponen tidak ditingkatkan, dan masih menggunakan implementasi Http lama.
Sobvan
1

Yang perlu Anda lakukan adalah memasukkan pustaka berikut dalam tour app.module.ts dan juga memasukkannya ke dalam impor Anda:

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

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

Saya menghadapi masalah ini dalam kode saya. Saya hanya memasukkan kode ini di app.module.ts saya.

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

@NgModule({
  imports:      [ BrowserModule, HttpModule ],
  declarations: [ AppComponent ],
  bootstrap:    [ AppComponent ]
})
export class AppModule { }
Saurabh
sumber
1
Tolong jangan ulangi jawaban yang ada. Melakukan hal itu tidak menambah nilai bagi komunitas.
isherwood
1

import { HttpModule } from '@angular/http'; paket dalam file module.ts Anda dan tambahkan dalam impor Anda.

Alekya
sumber
1

Saya hanya menambahkan keduanya di app.module.ts saya:

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

&

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

Sekarang berfungsi dengan baik .... Dan jangan lupa untuk menambahkan

@NgModule => Imports:[] array

Dibya Prakash Das
sumber