Я довольно новичок в Javascript и Typescript / Angular ..
Я получаю статистику данных / игр с веб-сайта, чтобы создать собственное приложение статистики. Я создал интерфейс с определенными ключом / значениями, чтобы соответствовать данным, которые я хочу показать в моем шаблоне.
Ответ API, который я хочу показать, имеет форму вложенных объектов. Из-за этого я использую Object.keys (), чтобы перебрать объекты и показать результат в моем HTML-шаблоне.
Я могу показать JSON конкретного вложенного объекта просто отлично. Моя проблема: он показывает ВЕСЬ ключ / значения этого объекта, а не конкретные значения ключей, которые я определил в своем интерфейсе.
В моем HTML я зацикливаюсь на своем интерфейсе с именем lifeTimeStat Object.keys(lifeTimeStat)
- (также см. Полный HTML-код ниже)
Видя, как мне нужно перебирать объект, я попыталсясделать мой интерфейс lifeTimeStat объектом .. Вот так:
`export class CombatListComponent implements OnInit {
constructor(public combatService: CombatService) { }
lifeTimeStats: lifeTimeStat = {
headshotKills: null,
kills: null,
longestKill: null,
maxKillStreaks: null,
dailyKills: null,
weeklyKills: null,
damageDealt: null,
roadKills: null,
teamKills: null,
vehicleDestroys: null,
suicides: null,
roundMostKills: null,
dBNOs: null,
assists: null
}
ngOnInit() {
this.combatService.getCombat().subscribe(data => {this.lifeTimeStats =
data} );
}
}
`
Но, конечно, я получаю эту ошибку: TypeError: Cannot read property 'keys' of undefined
.. Так что, похоже, янеправильно превращаю мой интерфейс в объект ..
Единственный способ, с помощью которого я могу заставить JSON отображаться в моем HTML, это если я вместо этого определю Object = Object
вместо этой дурацкой попытки превратить мой интерфейс вобъект .. Argh. Object = Object
просто покажет весь объект, а не конкретную форму моего интерфейса.
HTML: battle-list.component.html
<div *ngFor="let key of Object.keys(lifeTimeStat)"> {{ lifeTimeStats[key].attributes.gameModeStats.solo| json }} </div> <br>
Сервисный компонент: battle.service. ts
`@Injectable({
providedIn: 'root'
})
export class CombatService {
getCombat():Observable<lifeTimeStat> {
return this.http.get<lifeTimeStat>(this.configUrl, { observe:'body',
responseType: 'json', headers: getHeaders });
}`
Интерфейс:
`export interface lifeTimeStat {
headshotKills: number,
kills: number,
longestKill: number,
maxKillStreaks: number,
dailyKills: number,
weeklyKills: number,
damageDealt: number,
roadKills: number,
teamKills: number,
vehicleDestroys: number,
suicides: number,
roundMostKills: number,
dBNOs: number,
assists: number,
} `
Я просто хочу показать выбранные данные, как я определил в моем интерфейсе. Я гуглял / искал SO много часов в течение двух, почти трех дней: (* 1033 *