Угловой - умный стол не заполнится - PullRequest
0 голосов
/ 05 сентября 2018

Моя таблица Smart не будет заполняться с помощью HttpClient для отправки запроса на получение данных JSON.

this.http.get('http://localhost:56591/api/db/get').subscribe((data) => {
  return data;
});

Возвращает:

[
  {"id":1,"name":"User1","email":"user1@email.com","password":"test"},
  {"id":2,"name":"User2","email":"user@email.com","password":"test"},
  {"id":3,"name":"User3","email":"user@email.com","password":"test"}
]

Использование возврата в подписке дает мне эту ошибку:

ОШИБКА TypeError: Невозможно прочитать свойство 'slice' из неопределенного в LocalDataSource.push ../ node_modules / ng2-smart-table / lib / источник данных / local / local.data-source.js.LocalDataSource.getElements (local.data-source.js: 71)

При присвоении объекта непосредственно переменной работает:

var data = [
  {"id":1,"name":"User1","email":"user1@email.com","password":"test"},
  {"id":2,"name":"User2","email":"user@email.com","password":"test"},
  {"id":3,"name":"User3","email":"user@email.com","password":"test"}
];
return data;

Единственное отличие, которое я могу найти, состоит в том, что этот код выдает ошибку при использовании запроса get вместо непосредственного присвоения переменной объекту.

constructor(private service: SmartTableService) {
  const data = this.service.getData();
  this.source.load(data);
}

Аргумент типа 'void' не может быть назначен параметру типа 'any []'.

Кто-нибудь знает, где я ошибся?

Заранее спасибо.

1 Ответ

0 голосов
/ 05 сентября 2018

Вам нужно дождаться завершения запроса Http, прежде чем вы сможете присвоить данные, которые он возвращает. Итак, что происходит, когда вы присваиваете const data = this.service.getData(); ничего не возвращается.

Вы можете решить эту проблему, вернув Observable из вашего http-звонка в вашем сервисе:

getData() {
    return this.http.get('http://localhost:56591/api/db/get');
}

Затем в вашем компоненте подпишитесь на возвращаемый Observable, он будет ждать разрешения http-вызова, прежде чем передать данные в this.source.load(data);

this.service.getData().subscribe((data) => {
    this.source.load(data);
});

Дайте мне знать, если это работает, в противном случае мы сможем устранить неполадки.

...