Как я уже пытался комментировать ранее, я обычно создаю поле под каждым элементом для хранения моего ключа. Таким образом, мне не нужно проходить через обруч, чтобы получить ключ $ в передней части.
Так что, если у вас есть поле под каждым продуктом, как так, $key: 'Key_1Ceuejd
.
Тогда ваш * ngFor отлично бы работал с p.$key
.
Тем не менее, с тем, что у вас есть, вам нужно будет сделать 2 * ngFor's для достижения вашего результата.
Сначала установите переменную objectKeys
в классе компонентов, чтобы получить ключи.
Затем в вашем шаблоне сделайте следующее:
<ng-container *ngFor='let key of objectKeys(products)'>
<h2>key: {{key}}</h2>
<tbody>
<tr *ngFor='let p of products[key]'>
<td>{{p.title}}</td>
<td>{{p.price}}</td>
<td>
<a routerLink="'/admin/products/{{key}}">Edit {{key}}</a>
</td>
</tr>
</tbody>
<ng-container>
Пример 2: база данных Firebase
В этом примере с данными Firebase вам не понадобятся два * ngFors, скорее вы получите информацию о продукте по ключу продукта
firebaseData[key]
. Я думаю, это то, что вы ищете.
<ng-container *ngFor='let key of firebaseObjectKeys(firebaseData)'>
<h2>key: {{key}}</h2>
<tbody>
{{firebaseData[key] | json}}
<tr *ngIf='firebaseData[key]'>
<td><h3>{{firebaseData[key].slang}}</h3></td>
<td>{{firebaseData[key].slangDefine}}</td>
<td>
<a routerLink="'/admin/products/{{key}}">Edit {{key}}</a>
</td>
</tr>
</tbody>
</ng-container>
Вот рабочий пример: https://stackblitz.com/edit/angular-umpqyh