ngFor如何分别绑定每个元素
ngFor how to bind each element separately
我正在尝试在 Angular 4 中构建一个仪表板。在该仪表板中,我使用 *ngFor 迭代 json(通过服务提供)并在其中显示了一系列报告牌。在每张卡片中 header 上都有一些图标,单击它们后将执行一些操作。例如刷新、下载、工具提示中的 pop-up 信息、pin-unpin 等
为此,我想到了使用变量来绑定这些元素,例如 (click)="function()",以及 [@animationTag]= "variable",如下:
...
<div class="card" *ngFor="let r of reportCards; let x of index">
<div class="card-header">
{{r.reportName}}
<div class="close" aria-label="Close">
<i class="fa fa-thumb-tack" aria-hidden="true" [@pinUnpin]="isPinned" (click)="unpinCard($event)"></i>
</div>
</div>
<div *ngIf="!ifMinimized" class="card-body">
{{r.reportMainDesc}}
</div>
<div *ngIf="!ifMinimized" class="card-footer">
{{r.reportFooterDesc}}
</div>
</div>
...
对应动画代码:
animations: [
trigger('pinUnpin', [
state('pin', style({
transform: 'rotate(0deg)',
})),
state('unpin', style({
transform: 'rotate(90deg)',
})),
transition('pin => unpin', animate('300ms ease-in-out')),
transition('unpin => pin', animate('300ms ease-in-out'))
]),
]
组件内部对应的函数:
unpinCard(pEvent) {
this.ifMinimized = this.ifMinimized === true ? false : true;
this.isPinned = this.isPinned === "pin" ? "unpin" : "pin";
}
问题:
所有功能都运行良好,但问题是每当我单击特定卡片上的一个(图钉)图标时。如果对所有卡片执行操作,则意味着所有卡片都一起最小化,并且 ( pin) 所有卡片的图标同时动画化。
我猜,这是由于变量 ifMinimized & ifPinned 与通过 ngFor 生成的所有卡片绑定.
请帮助我理解如何绑定单个元素,这样如果我单击一个元素的图标,操作将只对该项目执行,而不是对 ngFor 生成的所有元素执行。
提前致谢。
只需将 reportCard (r) 传递给您的 unpinCard 函数并在该卡片上设置 ifMinimized 和 isPinned:r['ifMinimized'] = !r['ifMinimized']
或删除该函数并在 html 中简单键入:
(click)="r.ifMinimized = !r.ifMinimized"
*ngIf="!r.ifMinimized"
我正在尝试在 Angular 4 中构建一个仪表板。在该仪表板中,我使用 *ngFor 迭代 json(通过服务提供)并在其中显示了一系列报告牌。在每张卡片中 header 上都有一些图标,单击它们后将执行一些操作。例如刷新、下载、工具提示中的 pop-up 信息、pin-unpin 等
为此,我想到了使用变量来绑定这些元素,例如 (click)="function()",以及 [@animationTag]= "variable",如下:
...
<div class="card" *ngFor="let r of reportCards; let x of index">
<div class="card-header">
{{r.reportName}}
<div class="close" aria-label="Close">
<i class="fa fa-thumb-tack" aria-hidden="true" [@pinUnpin]="isPinned" (click)="unpinCard($event)"></i>
</div>
</div>
<div *ngIf="!ifMinimized" class="card-body">
{{r.reportMainDesc}}
</div>
<div *ngIf="!ifMinimized" class="card-footer">
{{r.reportFooterDesc}}
</div>
</div>
...
对应动画代码:
animations: [
trigger('pinUnpin', [
state('pin', style({
transform: 'rotate(0deg)',
})),
state('unpin', style({
transform: 'rotate(90deg)',
})),
transition('pin => unpin', animate('300ms ease-in-out')),
transition('unpin => pin', animate('300ms ease-in-out'))
]),
]
组件内部对应的函数:
unpinCard(pEvent) {
this.ifMinimized = this.ifMinimized === true ? false : true;
this.isPinned = this.isPinned === "pin" ? "unpin" : "pin";
}
问题:
所有功能都运行良好,但问题是每当我单击特定卡片上的一个(图钉)图标时。如果对所有卡片执行操作,则意味着所有卡片都一起最小化,并且 ( pin) 所有卡片的图标同时动画化。
我猜,这是由于变量 ifMinimized & ifPinned 与通过 ngFor 生成的所有卡片绑定.
请帮助我理解如何绑定单个元素,这样如果我单击一个元素的图标,操作将只对该项目执行,而不是对 ngFor 生成的所有元素执行。
提前致谢。
只需将 reportCard (r) 传递给您的 unpinCard 函数并在该卡片上设置 ifMinimized 和 isPinned:r['ifMinimized'] = !r['ifMinimized']
或删除该函数并在 html 中简单键入:
(click)="r.ifMinimized = !r.ifMinimized"
*ngIf="!r.ifMinimized"