2017-01-26 2 views
1

У меня есть компонент Angular2, и мне нужно заполнить атрибут интерфейса некоторыми данными, возвращаемыми веб-сервисом. Я этот код:Angular2: дождаться ответа ответа службы перед компонентом show

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


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

но мне кажется, что компонент показал, прежде чем служба имеет делать свою работу. На самом деле, если я пытаюсь получить доступ, например, к field1, я получаю сообщение об ошибке:

error_handler.js:47 EXCEPTION: Cannot read property 'field1' of undefined 

что не так?

+0

Переместить 'this.initInterface();' после строки 'this.response = response' в успех обратного вызова. –

+0

Также попробуйте инициализировать свой объект ('this.myInterface = {field1: '', field2: '', fieldFromService: ''};') вне initInterface() –

+1

вы должны использовать * ngIf = "myInterface" в своем html, чтобы проверить, прибывают ли данные или нет. Вы не столкнетесь с неопределенной ошибкой, если используете * ngIf. попробуй –

ответ

0

Я считаю, что это должно сработать.

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

) 

}

Смежные вопросы