typescript - Angular 2. Http map\subscribe-problem
vill läsa JSON-fil och bygga settingsProvider.
Så jag gör det på det här sättet:
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;
}
}
Men fick ett fel som detta:
Så, min första fråga är - varför så?
Andra frågan:
När jag gör så här:
http.request('js/app/config/config.json').subscribe(data => {
this.url = data.json().url;
});
this pekar inte på klassen, utan på Subscriber-instansen. Varför så? Jag trodde att "fat-arrow"-lambda i TypeScript hjälper oss att bli av med denna konstiga closure.
Svar #1
Map-funktionen behöver importeras från RXJS, försök till exempel:
import 'rxjs/add/operator/map';
Det finns inget behov av att göra HTTP-förfrågan inuti konstruktorn, du borde göra det till sin egen metod. Ett exempel från för ett tag sedan som jag gjorde med namnen ändrade så att det blir mer begripligt i ditt sammanhang:
@Injectable()
export class SettingsProvider{
constructor(public http: Http) {
}
getSettings() {
//http request code here
}
}
Jag kan inkludera mer kod senare om du inte får det att fungera baserat på detta. Importen borde åtminstone lösa ditt kartproblem.
Svar #2
Jag får också ett sådant fel när jag försöker hämta branch-json, så jag ändrar i kartan. Jag använde $.parseJSON(res._body), och det fungerar bra.
getbranch(){ return this.http.get("/branch").map( res => $.parseJSON(res._body) ).subscribe( data => this.branches=data ,error => alert('Ingen data hittades') )}
