2016-06-20 3 views
1

Я заполняю таблицу, связывая массив с ngFor в шаблоне.Angular 2 уведомляет, когда http-запрос завершен

Однако, поскольку массив заполняется асинхронно из HTTP-запроса, я замечаю небольшую задержку рендеринга, когда новые данные загружаются в массив с удаленного сервера, что вызывает «мигание», в то время как таблица повторно заселяется.

Это не происходит, если я локально заполняю массив, поэтому я предполагаю, что проблема заключается в том, что по мере того, как каждый элемент загружается в массив из наблюдаемого, таблица обновляется.

Я хотел бы подождать, пока данные будут полностью загружены до того, как они будут отображены в шаблоне. Подход, который я пытался, - загрузить данные в массив temp, получить уведомление, когда массив temp полностью заполнен, а затем добавить его к массиву, связанному с шаблоном.

Я считаю, что третий параметр подписки должен что-то сделать, поэтому я попытался использовать это. См. Ниже ...

this.dataService.callApi() 
    .subscribe(
     response => this.arrayTemp = response.content, 
     error => this.response = error.text(), 
     () => this.array = arrayTemp 
    ); 

Однако, это не работает, как я ожидал, и я все еще вижу проблему рендеринга. Есть идеи? Спасибо.

+0

Как вы визуализируете стол? С '* ngFor'? – rinukkusu

+2

'Http.get()' в настоящее время выполняет только одно событие, поэтому использование 1-го или 3-го обратного вызова обычно не имеет значения. –

+0

Вы можете просто добавить 'do (...)' like this.dataService.callApi(). Do (value => console.log (value)). Subscribe (...) 'и вы увидите, что получает (вам нужно импортировать 'do') –

ответ

1

Я использую логическую «загруженную» внутри подписки.

Установите «загружен» по умолчанию на значение «false» и используйте «ngIf =» загруженный «arround your table», а затем установите его внутри подписки.

this.loaded = false; 
this.dataService.callApi() 
    .subscribe(
     (response) => { 
      this.arrayTemp = response.content; 
      this.loaded = true; 
     } 
    ); 
Смежные вопросы