У вас есть 2 варианта:
Адаптируйте HTML к l oop вокруг total_by_level
и запросите label_name
соответственно
Построить вывод в коде
Похоже, вы пытались оба, и поэтому открыты для любого из них. Лично я предпочитаю делать как можно больше в коде и сохранять HTML настолько тупым, насколько это возможно, поэтому я бы выбрал подход 2.
In ngOnInit()
(который должен быть там, где вы делаете любые начальные обработки), я бы построил массив на основе структуры на total_by_level
.
output: any[];
ngOnInit() {
this.output = Object.keys(this.total_by_level).map(levelKey => {
const child = this.total_by_level[levelKey];
return {
level: {
label: this.label_name[levelKey]
},
children: Object.keys(child).map(childKey => ({
label: this.label_name[childKey],
value: child[childKey]
}))
};
});
}
Тогда становится просто привязать этот массив в вашем HTML:
<div *ngFor="let item of output">
{{item.level.label}}
<div *ngFor="let child of item.children">
{{child.label}}
{{child.value}}
</div>
</div>
Вы имеете дело с некоторыми странными структурами данных, и я не уверен в вашей терминологии, поэтому я немного догадался здесь. Вы можете взять концепцию этой идеи и работать с ней. Я также предполагаю, что в total_by_level
.
ДЕМО: https://stackblitz.com/edit/angular-upqdex
есть только один вложенный ребенок.