我有一个“any”类型的数组,其中填充了动态数据:
let history: any = [];
history.push({ grouped_date: "Week No. 12", isHeader: true });
history.push({ activity: "go to work", project: "intern project" });
history.push({ activity: "eat some food", project: "no project" });
因此,如果该项目是“分组日期”类型,我想以不同的方式显示我的数据。
<ul *ngFor="let item of items">
<li>
<div *ngIf="item.isHeader" style="background-color: #882346;">
Week: {{item.grouped_date}}
</div>
<div *ngIf="item.activity != null" style="background-color: #fff;">
activity: {{item.activity}}
</div>
</li>
</ul>
但问题是,列表总是显示第一个 div 容器。因此上面的示例显示了三次“周:第 12 周”。如何迭代这样的列表以将某些行显示为“分隔线”?
更新:
好吧,这很奇怪,Wassim Chegham 的答案非常有效。所以我会更具体(我只是用一个小例子来分解问题)。
我使用PrimeNG DataList,它是一个用于在列表视图中显示数据的组件。源代码的使用方式与上面的示例相同:
<div class="ui-datalist-content ui-widget-content">
<ul class="ui-datalist-data">
<li *ngFor="let item of dataToRender">
<template [pTemplateWrapper]="itemTemplate" [item]="item"></template>
</li>
</ul>
</div>
(请参阅完整源代码的链接)。但数据显示错误,如上所述。这里出了什么问题,我如何使用 prime-ng 正确显示数据?
您提交的代码似乎没问题。它甚至可以满足您的要求。 这是完整的示例:
import {Component, NgModule} from '@angular/core'
import {BrowserModule} from '@angular/platform-browser'
@Component({
selector: 'my-app',
template: `
<ul *ngFor="let item of history">
<li>
<div *ngIf="item.isHeader" style="background-color: #882346;">
Week: {{item.grouped_date}}
</div>
<div *ngIf="item.activity != null" style="background-color: #fff;">
activity: {{item.activity}}
</div>
</li>
</ul>
`,
})
export class App {
history:any;
constructor() {
this.history = [];
this.history.push({ grouped_date: "Week No. 12", isHeader: true });
this.history.push({ activity: "go to work", project: "intern project" });
this.history.push({ activity: "eat some food", project: "no project" });
}
}
@NgModule({
imports: [ BrowserModule ],
declarations: [ App ],
bootstrap: [ App ]
})
export class AppModule {}
看到这个plunkr:https://plnkr.co/edit/ycL1nQrKpjNsOMtDoijE?p=preview