Ваш menulist
является объектом, но вам нужно, чтобы он был массивом.
Одним из решений является сделать его массивом в TypeScript. Например:
subscribe((data: any) => {
this.categories = data.map(category => {
const menuKeys = Object.keys(category.menulist || {});
const menulist = menuKeys.map(menuKey => category.menulist[menuKey]);
return { ...category, menulist };
});
console.log(this.categories);
});
Затем вам нужно l oop через categories
И через их menulist
предметов:
<tbody>
<ng-container *ngFor="let category of categories">
<tr *ngFor="let item of category.menulist" role="row" class="even text-right">
<td class="text-right">{{item.body}}</td>
<td class="text-center">{{item.title}}</td>
</tr>
</ng-container>
</tbody>
Другое решение заключается в использовании keyvalue pipe , например:
<tbody>
<ng-container *ngFor="let category of categories">
<tr *ngFor="let item of category.menulist | keyvalue" role="row"
class="even text-right">
<td class="text-right">{{item.value.body}}</td>
<td class="text-center">{{item.value.title}}</td>
</tr>
</ng-container>
</tbody>
Я не проверял их, поэтому следите за опечатками.
Также не забудьте unsubscribe
в ngOnDestroy
.
Вы также спрашивали, как удалить определенный c элемент из списка некоторых категорий.
Для этого вам необходимо знать ключ элемента списка Menulist. Замените
const menulist = menuKeys.map(menuKey => category.menulist[menuKey]);
на
const menulist = menuKeys.map(key => ({...category.menulist[key], key}));
, и тогда вы можете сделать
this.af.object(`Categories/${category.$key}/menulist/${item.key}`).remove();