typescript - Angular 2. Http map\subscribe sorunu
JSON dosyasını okumak ve settingsProvider oluşturmak istiyorum.
Yani bunu şöyle yapıyorum:
import {Http} from "angular2/http";
import {Injectable} from "angular2/core";
@Injectable()
export class SettingsProvider{
url: string = "";
constructor(http: Http){
http.request('js/app/config/config.json').map(data => data.json()).subscribe(data => this.url = data.url);
}
getUrl():string {
return this.url;
}
}
Ama şu şekilde bir hata aldım:
Yani, benim ilk sorum şu - neden böyle?
İkinci soru:
Ben böyle yaparken:
http.request('js/app/config/config.json').subscribe(data => {
this.url = data.json().url;
});
this sınıfa değil, Subscriber örneğine işaret ediyor. Neden böyle? TypeScript'teki "fat-arrow" lambda'nın bu garip kapanımı (closure) ortadan kaldırmamıza yardımcı olduğunu düşünmüştüm.
Cevap #1
Map fonksiyonu RXJS'ten içe aktarılmalıdır, örneğin deneyin:
import 'rxjs/add/operator/map';
HTTP isteğini yapmaya yapıcı metodun içinde gerek yok, bunu kendi metodunuz haline getirmelisiniz. İşte daha önce yaptığım ve isimleri değiştirilmiş bir örnek, böylece sizin bağlamınızda daha anlamlı olur:
@Injectable()
export class SettingsProvider{
constructor(public http: Http) {
}
getSettings() {
//http request code here
}
}
Bunu temel alarak çalıştırmayı başaramazsan, daha sonra daha fazla kod ekleyebilirim. İçe aktarma en azından harita sorununu çözmeli.
Cevap #2
Ben de dal json'u almak için böyle bir hata alıyorum, bu yüzden haritada değişiklik yaptım. Ben $.parseJSON(res._body) kullandım ve bu sorunsuz çalışıyor.
getbranch(){ return this.http.get("/branch").map( res => $.parseJSON(res._body) ).subscribe( data => this.branches=data ,error => alert('Veri bulunamadı') )}
