Переменная xyz
, которую вы вводите как DataDto[]
, массив, на самом деле является объектом.Это можно увидеть в вашем console.log
, массив будет заключен в [], а не {}
is an object --> {
content: Array(1), pageable: {…}, totalPages: 1, totalElements: 1, last: true, …}
content: Array(1)
0: {name: max, name: null, asset: null, …}
length: 1
}
Данные, которые вы ищете, скорее всего, являются объектом ответа content
, поэтому добавьте импортдля import {map} from 'rxjs/operators';
и преобразуйте данные, полученные из ответа:
this.xyzService.getData(this.PrimaryId).pipe(
map((xyzResponse: any) => xyzResponse.content)
).subscribe(
(xyz: DataDto[]) => {
this.xyz = xyz;
console.log(this.xyz);
let dataNames = xyz.map(data => data.name);
console.log(dataNames);
}
Я набрал xyzResponse как any
, но вы можете создать для него тип многоразового использования, если API всегда возвращаетobject with content, pageable, totalPages, ...
Rxjs - это библиотека, которую Angular использует для обработки асинхронного программирования, такого как вызовы HTTP или события компонента.Rxjs объединяет асинхронные манипуляции в канал (отсюда и вызов .pipe
).Внутри этого канала rxjs ожидает цепочку операторов, которые будут выполнять операции с асинхронными данными, один за другим.Оператор map
принимает входное значение и возвращает новое значение, так что значение, на которое вы подписаны, было преобразовано из ответа HTTP в поле .content
ответа HTTP.
Исправление работы таким способомвсе ошибки компилятора TypeScript и позволяют вам связывать дополнительные вызовы позже, например, повторять попытки, если время ожидания API истекло, или перехватывать ошибки, или объединяться с другими вызовами HTTP.