2016-04-25 9 views
2

Ich versuche, ein Objekt von einem Observable in Angular 2 zu erhalten, das von einem Service bereitgestellt wird. Bisher kann ich das Beobachtbare abonnieren und den Inhalt in der Konsole sehen, aber ich kann ein Objekt nicht anhand seiner ID herausfiltern. Ich habe folgendes versucht, aber einen leeren Bildschirm bekommen. Irgendwelche Tipps geschätzt.Erhalte Artikel von Observable in Angular 2 mit Typoskript

service.ts:

getJobs() { 
    this.observableData = this._http.get('json_path/') 
     .map(res => res.json()) 
     .do(val => { 
     this.result = val; 
     this.observableData = null; 
     }) 
     .share(); 
    return this.observableData; 
} 

component.ts:

let id = this._routeParams.get('id'); 
this._jobService.getJobs().map(jobs => jobs.filter(item => item.id === id).subscribe(job => this.job = job)[0]); 
+0

Ist das ich? beabsichtigte. Sie haben die 'getItems()' Methode gepostet und dann die 'getJobs()' Methode unten benutzt. –

+0

Ah, das war ein Fehler. Sie sollten entweder getItems() oder getJobs() sein. Danke – skyscript

Antwort

4

Ich glaube, Sie so etwas wie wollen:

let id = this._routeParams.get('id'); 
this._jobService.getJobs().map(jobs => { 
    return jobs.filter(item => item.id === id)[0]; 
}).subscribe(job => this.job = job)); 

Sie können nicht von jobs.filter() dem Ergebnis abonnieren

+0

Das schien für mich nicht zu funktionieren - die Variablen zurückgegeben als nicht definiert oder leer. Obwohl der Code in der Konsole fehlerfrei lief, so dass die Syntax korrekt aussieht, werde ich weiter daran arbeiten. Vielen Dank. – skyscript

+1

Ich habe es funktioniert, indem Sie den Index [0] auf das Ergebnis von 'jobs.filter()' anstelle von '.subscribe()' verschoben haben. 'this._jobService.getJobs(). Map (jobs => { return jobs.filter (item => item.id === id) [0]; }). Subscribe (job => this.job = job); ' – skyscript

Verwandte Themen