Я пытаюсь заполнить таблицу данными из моего внутреннего API.Таблица ожидает ввода rows
, представляющего собой массив объектов, каждый из которых представляет строку в таблице и состоит из пар столбец-имя / значение.Внутренний сервер публикует массив объектов JSON, например:
[{"column1":"val1","column2":"val2"},{"column1":"valA","column2":"valB"}]
Если я просто скопирую и вставлю эту строку в мой файл .ts и назначу ее непосредственно свойству row, все будет работатьправильно:
this.rows = [{"column1":"val1","column2":"val2"},{"column1":"valA","column2":"valB"}]
Это работает независимо от того, определено ли свойство rows
как any
или Array<DataObject>
или что-то промежуточное.Так почему же я не могу добиться такой же функциональности через httpClient?
Вот что у меня есть:
data-service.service.ts:
@Injectable()
export class DataService {
constructor (private http: HttpClient) {}
public getData() {
return this.http.get<Array<DataObject>>(apiURL, {responseType : 'json'});
}
table-view.route.ts:
export class TableView implements OnInit {
rows: Array<DataObject>;
constructor(dataService: DataService) {
dataService.getData()
.subscribe((result: Array<DataObject>) => this.rows = result)
}
}
data-object.ts
export interface DataObject {
column1: string;
column2: string;
}
Кажется, что данные правильно загружаются, но они введены неверно или добавлены в дополнительныйобъект или что-то и таблица не может прочитать это.Нет ошибок;просто пустой столИнтересно, что я добавил это в свой html перед объявлением таблицы, просто чтобы убедиться, что мои данные проходили:
<div>{{rows[0].column1}}</div>
Это правильно выводит «val1», И это внезапно заполняет таблицу ВСЕМИ данными.Меняет ли этот доступ каким-либо образом тип rows
на то, что компонент таблицы может понять?
Я пробовал всевозможные варианты приведенного выше кода с проверкой типов и без нее;Я попытался удалить заголовок содержимого json, прочитав его в виде открытого текста, а затем JSON.parse()
.Я понимаю, что мог бы просто пройтись по массиву, создать экземпляр DataObject
s и сопоставить поля по отдельности, прежде чем помещать их в rows
, но должен быть более простой способ сделать это, верно ...?Любой толчок в правильном направлении приветствуется.