2016-05-12 4 views
0

Ich habe einen Dienst wie:So prüfen Sie alle HTTP-GET-Anforderung abgeschlossen ist (aufgelöst) - Angular 2

getItems(id: string): Observable<items> { 
    return this.http.get(this.url + id) 
     .map(response => response.json()); 
} 

In Komponentenvorlage:

<tr *ngFor="#item of items"> 
    <td> 
     <another-component [values]=item.values></another-component> 
    </td> 
</tr> 

In einer anderen Komponente A:

ngOnChanges() { 
    this.values.filter((value) => value.number > 0) 
     .map((value) => this.positive[value.id] = value.number); 
     } 

Es gibt eine Liste von Werten und IDs. Ich möchte Positives trennen, bevor ich sie zeige.

Ich habe eine Fehlermeldung erhalten. Filter konnte nicht für undefined verwendet werden. Danach verwende ich ngIf, um zu prüfen, ob die Eigenschaft existiert, aber es zeigt nur einige der Werte (die aufgelöst sind).

So

Wie kann ich überprüfe alle Anforderung erledigt ist und alle Daten bereit (aufgelöst) in einer richtigen Art und Weise?

oder kann das Problem, das ich hatte, asynchron gelöst werden?

EDIT:

ich in meiner Komponente abonnieren verwenden.

ngOnInit() { 
    let id = this._routeParams.get('id'); 
    this.getItems(id) 
} 
this._itemsService.getItems(id).subscribe(
     data => this.items = data 
     ) 

Aber nicht alle Werte erscheinen von anderen Komponenten, da sie nicht abgeschlossen sind. Wie könnte ich andere Komponenten wissen lassen, dass es abgeschlossen ist, dann könnte es die komplette Liste filtern. Da der Filter bei Erfolg nicht abgeschlossen ist, wird der Filter nur auf einen oder zwei Werte angewendet, und nur ein oder zwei Werte werden angezeigt.

+0

Können Sie ein bisschen mehr auf „erarbeiten Aber nicht alle Werte angezeigt von anderen Komponenten si nce es ist nicht abgeschlossen. "Da ist es (was?) Ist nicht abgeschlossen. Was meinst du mit" fertig "hier? –

+0

@ Günter Zöchbauer Ich bekomme einige Werte von Rest api und analysiere es. Beim Überprüfen der Seite werden nicht alle Werte angezeigt. Aber danach Aktualisieren der Seite alle von ihnen zeigen (ich denke, weil Browser Seite Caching ist). Also ich meine, Get-Anfrage ist nicht abgeschlossen und auch wenn es abgeschlossen ist andere Werte nicht asynchron geladen. Vielen Dank für Ihre Aufmerksamkeit. – user3637478

Antwort

1

versuchen

map().subscribe() 

Quelle: Angular2 http.get() ,map(), subscribe() and observable pattern - basic understanding

Syntax:

.subscribe(success, failure, complete); 

Beispiel:

.subscribe(
    function(response) { console.log("Success Response" + response)}, 
    function(error) { console.log("Error happened" + error)}, 
    function() { console.log("the subscription is completed")} 
); 
+0

Vielen Dank für Ihre Hilfe Aber das ist keine Lösung für mein Problem. Ich habe versucht, meine Frage durch Bearbeiten zu klären. Sorry für Verwirrung. – user3637478

+0

Warum filtern Sie nicht innerhalb der Komponente auf abonnieren? – Som

+0

, weil ich diese "andere-Komponente" verwenden muss innerhalb mehrerer Komponenten, und ich sollte es nur eine Eigenschaft des Objekts als Eingabe geben. – user3637478

Verwandte Themen