angular - Http için sağlayıcı yok StaticInjectorError
Verileri API'imden çekmeye ve Ionic uygulamama doldurmaya çalışıyorum, ancak verilerin doldurulması gereken sayfaya girdiğimde uygulama çöküyor. Aşağıda iki .ts dosyam bulunmakta:
import { Component } from '@angular/core';
import { NavController, LoadingController } from 'ionic-angular';
import { RestService } from '../../providers/rest-service/rest-service';
@Component({
selector: 'page-all-patients',
templateUrl: 'all-patients.html',
providers: [RestService]
})
export class AllPatientsPage {
data: any;
loading: any;
constructor(public navCtrl: NavController, public restService: RestService, public loadingCtrl: LoadingController) {
this.loading = this.loadingCtrl.create({
content: `
<ion-spinner></ion-spinner>`
});
this.getdata();
}
getdata() {
this.loading.present();
this.restService.getJsonData().subscribe(
result => {
this.data=result.data.children;
console.log("Success: " + this.data);
},
err => {
console.error("Error : " + err);
},
() => {
this.loading.dismiss();
console.log('getData completed');
}
);
}
}
ve diğer dosya:
import { Http } from '@angular/http';
import { Injectable } from '@angular/core';
import 'rxjs/add/operator/map';
/*
Generated class for the RestServiceProvider provider.
See https://angular.io/guide/dependency-injection for more info on providers
and Angular DI.
*/
@Injectable()
export class RestService {
constructor(public http: Http) {
console.log('Hello RestServiceProvider Provider');
}
getJsonData() {
// return Promise.resolve(this.data);
return this.http.get('url').map(res => res.json());
}
}
HttpModule'u kullanmayı da denedim, ancak bu ölümcül bir hata. Hata şöyle gösteriliyor:
Error: Uncaught (in promise): Error: StaticInjectorError[Http]:
StaticInjectorError[Http]:
NullInjectorError: No provider for Http!
Error: StaticInjectorError[Http]:
StaticInjectorError[Http]:
NullInjectorError: No provider for Http!
at _NullInjector.get (http://lndapp.wpi.edu:8100/build/vendor.js:1276:19)
Neden 'no provider' hatası olduğunu bilmiyorum, çünkü bu, Ionic framework ile oluşturulmuş sağlayıcı.
Cevap #1
Uygulamanızda Http kullanabilmek için app.module.ts dosyanıza HttpModule'u eklemeniz gerekecek:
import { BrowserModule } from '@angular/platform-browser';
import { NgModule, ErrorHandler } from '@angular/core';
import { HttpModule } from '@angular/http';
...
imports: [
BrowserModule,
HttpModule,
IonicModule.forRoot(MyApp),
IonicStorageModule.forRoot()
]
DÜZENLE
Aşağıdaki yorumda belirtildiği gibi, HttpModule artık kullanımdan kaldırılmıştır, bunun yerine import { HttpClientModule } from '@angular/common/http' kullanın; HttpClientModule'ün imports:[] dizinizde olduğundan emin olun
Cevap #2
Güncelleme: Angular v6+
Eski sürümlerden (Angular v2 - v5) dönüştürülen uygulamalar için: HttpModule artık kullanımdan kaldırıldı ve HttpClientModule ile değiştirmeniz gerekiyor, aksi takdirde hata alırsınız.
- Sizin app.module.ts dosyanızda
import { HttpModule } from '@angular/http';ifadesini yeni HttpClientModule ile değiştirinimport { HttpClientModule} from "@angular/common/http";Not: Daha sonra modüllerinimports[]dizisini güncelleyerek eskiHttpModuleifadesini kaldırıp yerine yeniHttpClientModuleifadesini eklediğinizden emin olun. - HttpModule kullanan herhangi bir servisinizde
import { Http } from '@angular/http';ifadesini, yeni HttpClient ile değiştirinimport { HttpClient } from '@angular/common/http'; Http yanıtınızı nasıl yönettiğinizi güncelleyin. Örneğin - Eğer şöyle görünen bir kodunuz varsa
http.get('people.json').subscribe((res:Response) => this.people = res.json());
Yukarıdaki kod örneği bir hata ile sonuçlanacaktır. Artık yanıtı ayrıştırmamıza gerek yok, çünkü yanıt zaten config nesnesi içinde JSON olarak geliyor.
Abonelik geri araması, veri alanlarını bileşenin şablonunda görüntüleme için veri bağlı olan bileşen yapılandırma nesnesine kopyalar.
Daha fazla bilgi için lütfen - Angular HttpClientModule - Resmî Belgeler'e bakınız
