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