2016-04-07 6 views
1

Ich fange gerade an, eckig2 zu erlernen. Ich habe Problem beim Anrufen des Services in angular2.The Serviceanrufe erfolgreich, aber ich habe Problem, wie ich Daten behandeln kann. In Angular1 tun wir wie folgt aus:Anrufdienst in Angular2

DemoService.getExchangeDataConnection().then(function(response){ 
//here we handle all the data 
}) 

Angular2

constructor(private _sampleService: SampleService){ 
    this._sampleService = _sampleService; 
} 


onClickMe(){ 
    this.clickMessage ='You are my hero!'; 
    this.error = ""; 
    this.countries = []; 
    this._sampleService.test() 
    .subscribe(
     data => this.countries = data, 
     error => this.error = "Region " + this.region + " is invalid." 
    ); 

    } 

hier Wie kann ich Daten umgehen Hier Mein Service:

export class SampleService { 

constructor(http: Http){ 
     this.http = http; 
    } 

    test(){ 
console.log(AppSettings.API_ENDPOINT); 
    return this.http.get(AppSettings.API_ENDPOINT+"oceania").toPromise() 
     .then(res => console.log(res.json()), err => console.log(err)); 
    } 

} 
+0

nicht umwandeln Sie http versprechen nennen. – Chandermani

Antwort

4

Wenn die test Methode eine beobachtbare liefert die Sie benötigen um es auf ähnliche Weise zu abonnieren als mit Versprechen:

this._sampleService.test() 
    .subscribe(
    data => this.countries = data, 
    error => this.error = "Region " + this.region + " is invalid." 
    ); 

Zum Beispiel für eine test Methode wie folgt:

test() { 
    return this.http.get('http://...').map(res => res.json()); 
} 

Sie können feststellen, dass Sie auch Versprechen mit Angular2 verwenden können. In diesem Fall behandeln Sie die Antwort genauso wie Sie.

bearbeiten

Sie Ihre test Methode auf diese Weise aktualisieren könnte:

test(){ 
    console.log(AppSettings.API_ENDPOINT); 
    return this.http.get(AppSettings.API_ENDPOINT+"oceania") 
       .map(res => console.log(res.json()); 
} 

und es so nennen:

this.service.test().subscribe(data => { 
    (...) 
}); 

Wenn Sie versprechen nutzen möchten, müssen Sie Geben Sie etwas in Ihren then Rückruf zurück, um die Verkettung zu aktivieren:

test(){ 
    console.log(AppSettings.API_ENDPOINT); 
    return this.http.get(AppSettings.API_ENDPOINT+"oceania").toPromise() 
    .then(res => res.json(), err => console.log(err)); // <--------- 
} 

Sie können Ihre Daten jetzt auf diese Weise erhalten:

this.service.test().then(data => { 
    (...) 
}); 
+0

Ich habe abonnieren ist keine Funktion – Karan

+0

Was gibt die 'test' Methode zurück? –

+0

das gibt die Daten zurück, aber ich weiß nicht, wie kann ich das – Karan