[英]Angular 7 - Expand or Collapse Divs in a For loop
我在 For 循环中有多个卡片。 在每张卡片中,我想使用链接或按钮显示和隐藏卡片内的内容。 我没有唯一的 ID 来分配我想要切换的每个 div。 有没有办法做到这一点?
以下代码仅展开或折叠第一张卡片中的内容,即使在任何卡片中单击任何“展开”或“折叠”按钮也是如此。
<div *ngFor="let result of results">
<div class="clr-col-lg-12 clr-col-12">
<div class="card">
<div class="card-block">
<div *ngIf="result?.name">
<h3 class="card-title">{{result.name}}</h3>
</div>
<div class="expandCollapse">
<button (click)="toggle($event)">
{{buttonName}}
</button>
</div>
<div class="expandCollapseContent" *ngIf="showRuleContent">
<div *ngIf="result?.cTag">
<h5>C Tag</h5>{{result.cTag}}
</div>
</div>
</div>
</div>
</div>
</div>
成分
public showRuleContent:boolean = false;
public buttonName:any = 'Expand';
toggle($event) {
this.showRuleContent = !this.showRuleContent;
// CHANGE THE NAME OF THE BUTTON.
if(this.showRuleContent)
this.buttonName = "Collapse";
else
this.buttonName = "Expand";
}
您可以使用一个数组来保存每个元素的可见状态而不是单个变量。
模板
<div *ngFor="let result of results;let i = index">
<div class="clr-col-lg-12 clr-col-12">
<div class="card">
<div class="card-block">
<div *ngIf="result?.name">
<h3 class="card-title">{{result.name}}</h3>
</div>
<div class="expandCollapse">
<button (click)="toggle(i)">
{{hideRuleContent[i] ? 'Expand' : 'Collapse'}}
</button>
</div>
<div class="expandCollapseContent" *ngIf="!hideRuleContent[i]">
<div *ngIf="result?.cTag">
<h5>C Tag</h5>{{result.cTag}}
</div>
</div>
</div>
</div>
</div>
</div>
成分
public hideRuleContent:boolean[] = [];
public buttonName:any = 'Expand';
toggle(index) {
// toggle based on index
this.hideRuleContent[index] = !this.hideRuleContent[index];
}
这是在列表中隐藏/显示项目的巧妙方法。 您可以使用模板元素属性而不是将某些内容存储在数组中。
请注意它如何利用Angular 的模板变量(#ListItem)。
<ng-container *ngFor="let item of list">
<div #ContentElement></div>
<button (click)="toggle(ContentElement)">
</ng-container>
// Maybe there are other ways to do this part, here is an example.
// Idea here is to toggle a class.
close(e: HTMLElement) {
e.classList.toggle('hidden');
}
CSS 示例:
.hidden {
display: none;
}
如果您想从 DOM 中删除元素而不是隐藏:
close(e: HTMLElement) {
e.remove();
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.