Jim*_* P. 5 angular angular6 angular-ngfor
我的 Angular 6 应用程序需要显示一个表格列表,其中一个表格是对其组成元素的一组化学分析。
假设我有一个金属合金A。我对其进行了不同的化合物分析以找出其化学成分:Fe:0.001%、Cu:0.042% 等。
这是我的数据源,它只是一个带有模拟的打字稿文件
import { Certificate } from './certificate';
export const CERTIFICATES: Certificate[] = [
{ serie: '1050 AJ', ident: 'Fe', moy_certified: 0.297 },
{ serie: '1050 AJ', ident: 'Cu', moy_certified: 0.04 },
{ serie: '1050 AJ', ident: 'Mn', moy_certified: 0.0374 },
{ serie: 'X332.0 AC', ident: 'V', moy_certified: 0.019 },
{ serie: 'X4002 AA', ident: 'Mn', moy_certified: 0.037 }
];
Run Code Online (Sandbox Code Playgroud)
我想使用 Angular 6 在 HTML 中显示这些数据,在表格列表中,其中一个系列的每个分析按如下方式分组:
Serie: 1050 AJ
-------------------------
| Element | Composition |
-------------------------
| Fe | 0.0297 |
-------------------------
| Cu | 0.04 |
-------------------------
| Mn | 0.0374 |
Serie: X332.0 AC
-------------------------
| Element | Composition |
-------------------------
| V | 0.019 |
Serie: X332.0 AC
-------------------------
| Element | Composition |
-------------------------
| Mn | 0.037 |
Run Code Online (Sandbox Code Playgroud)
我的 HTML 文件现在看起来像这样
<ul class="cert-result">
<li *ngFor="let certificate of certificates">
<table>
<tr>
<th>Serie</th>
<th>Element</th>
<th>Composition</th>
</tr>
<tr>
<td>{{certificate.serie}}</td>
<td>{{certificate.ident}}</td>
<td>{{certificate.moy_certifiee}}</td>
</tr>
</table>
</li>
</ul>
Run Code Online (Sandbox Code Playgroud)
显然,这不是正确的方法,因为它为我的数据源的每个元素制作了一个表格。
您必须更改数据结构。
解决方案。
你的数据
export const CERTIFICATES: Certificate[] = [
{ serie: '1050 AJ', ident: 'Fe', moy_certified: 0.297 },
{ serie: '1050 AJ', ident: 'Cu', moy_certified: 0.04 },
{ serie: '1050 AJ', ident: 'Mn', moy_certified: 0.0374 },
{ serie: 'X332.0 AC', ident: 'V', moy_certified: 0.019 },
{ serie: 'X4002 AA', ident: 'Mn', moy_certified: 0.037 }
];
Run Code Online (Sandbox Code Playgroud)
在您的组件中创建一个方法。让说formatedData()
import { CERTIFICATES } from './certificate';
class AppComponent {
//Todo...
objectKey(obj) {
return Object.keys(obj);
}
formatedCerts() {
return CERTIFICATES.reduce((prev, now) => {
if (!prev[now.serie]) {
prev[now.serie] = [];
}
prev[now.serie].push(now);
return prev;
}, {});
/*
Now your data : { "1050 AJ": [ .... ], "X332.0 AC": [...], ... }
*/
}
}
Run Code Online (Sandbox Code Playgroud)
现在在模板中:
<ul class="cert-result">
<li *ngFor="let key of objectKey(formatedCerts())">
<span>{{key}}</span>
<table>
<tr>
<th>Élément</th>
<th>Moy. Certifiée</th>
</tr>
<tr *ngFor="let certificate of formatedCerts()[key]">
<td>{{certificate.ident}}</td>
<td>{{certificate.moy_certifiee}}</td>
</tr>
</table>
</li>
</ul>
Run Code Online (Sandbox Code Playgroud)
如果要优化,请将 的数据存储formatedCerts()到变量中。
| 归档时间: |
|
| 查看次数: |
15194 次 |
| 最近记录: |