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

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:


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.


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

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


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


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
  ],

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: []
})

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.


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]

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

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

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

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

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.


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

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.