2016-09-13 3 views
0

Bei http-Aufrufen möchte ich den eingehenden JSON einer lokalen Variablen in meiner Komponente zuweisen und sie in der Ansicht anzeigen.HTTP: Lokale Variable ist nach HTTP-Anforderung nicht definiert

Service:

getCases(){ 
    return this.http.get('someUrl') 
     .map((res: Response) => res.json()) 
} 

Komponente:

@Component({ 
    template: ` 
    <h1>Cases</h1> 
    <hr> 
    <br> 
    <table> 
     <tr *ngFor="let acase of cases" > 
      <td>{{acase.name}}</td> 
     </tr> 
    </table> 
    `, 
}) 

export class CaseListComponent implements OnInit { 

    //local variable, need to have use of this! 
    acase: Case; 
    cases: Case[]; 

    constructor(public _service: CaseService, public _route: ActivatedRoute) { 

    } 

    ngOnInit() { 
     this._service.getCases() 
      .subscribe(cases => this.cases = cases); 
     console.log(this.cases) // undefined!! 
    } 

    ngAfterContentInit() { 
     console.log("cases: ", this.cases) //undefined! 
    } 

} 
+0

Alles ist in Ordnung. Gibt es noch etwas, das Sie übersehen haben? Ändern Sie im Konstruktor public in private. – micronyks

+0

Kannst du auch am Ende deines Mappings einen Typ-Spezifizierer werfen? Etwas wie: '.map ((res: Response) => res.json() als Case [])' –

+0

Okay, versuch das 'getCases(): Observable { gib this.http.get (' someUrl ') zurück ... } ' – micronyks

Antwort

1

Sie zuweisen Fälle in der callback und die console.log wird, bevor Rückruf beendet laufen. daher wirst du undefiniert.

ngOnInit() { 
     this._service.getCases() 
      .subscribe(cases => { 
      this.cases = cases; 
      console.log(this.cases) // will print values... 
      }); 
     console.log(this.cases) // undefined!! 
    } 

Ähnlich ist Fall für ngAfterContentInit es vor Rückruf kehrt daher nicht definiert ausgeführt wird.

Hoffe das hilft !!

+0

Dies hat absolut den Trick! Wie Alberto unten sagte, war das Problem, das ich artikulieren wollte, das JSON-Objekt an meine Sicht zu binden, wie gesagt, ich bin ein Neuling, also kann ich mein Problem nicht richtig artikulieren;) Das hat mein Problem gelöst! Vielen Dank! – Alex

0

Sie könnten so:

this.http.get('someurl').map((res: Response) => res.json()).subscribe(res => this.result = res); 

Dank der Funktion Abonnieren Sie den Code ein, um das Ergebnis des asynchronen Anforderung reagiert und deserialisiert die zurück json in ein Objekt. Jetzt wird das zurückgegebene JSON-Objekt an die Ansicht gebunden.

Verwandte Themen