2017-01-26 8 views
1

Ich habe eine Angular2-Komponente, und ich muss ein Attribut einer Schnittstelle mit einigen Daten von einem Webservice zurückgegeben werden. Ich habe diesen Code:Angular2: warte, dass Service Antwort Antwort vor Show-Komponente

ngOnInit() { 
    this.services.callMyService().subscribe(
     response => this.response = response, 
     error => alert(error), 
     () => this.initInterface() 
    ) 
} 


initInterface() { 
    this.myInterface= { 
     field1: '', 
     field2: 'someData', 
     fieldFromService: this.response.field 
    }; 
} 

aber es scheint, dass Komponente zeigte vor Dienst seine Arbeit hat zu tun. Wenn ich beispielsweise auf field1 zugreife, erhalte ich einen Fehler:

was ist los?

+0

Verschieben 'this.initInterface();' nach der Zeile 'this.response = response' in Erfolg Rückruf. –

+0

Versuchen Sie auch, Ihr Objekt zu initialisieren ('this.myInterface = {field1: '', field2: '', fieldFromService: ''};') außerhalb von initInterface() –

+1

müssen Sie * ngIf = "myInterface" in Ihrem verwenden HTML-Code, um zu überprüfen, ob Daten angekommen sind oder nicht. Sie werden keinen undefinierten Fehler sehen, wenn Sie * ngIf verwenden. Versuch es –

Antwort

0

Ich glaube, das sollte funktionieren.

ngOnInit() { 
    this.services.callMyService().subscribe(
     response => {this.response = response; 
       () => this.initInterface(); 
       }, 
     error => alert(error), 

) 

}