为什么 ngb-bootstrap 折叠控件的切换折叠按钮会折叠整个动态生成的卡片集?
why ngb-bootstrap Collapse control 's toggle collapse button collapses the whole dynamically generated card set?
我在我的 angular 9 应用程序中使用 ngb-bootstrap
折叠控件。
我已将 ngb-bootstrap
折叠控件放置在 bootstrap 卡片中,如您所见,下面的代码将生成多张卡片,我已将折叠按钮链接到卡片上 header 与那张特定卡片的卡片 body 所以当点击按钮时只有那张卡片折叠,而不是整个卡片组。我已将 aria-controls
属性设置为 ngbCollapse
div 的 id
,如以下代码所示。但我面临的问题是,当我单击按钮时,整个卡片组都折叠起来
<div class="animated fadeIn" style="margin-left: 2%;margin-right: 2%;margin-top: 2%;" id="qgroup-div-g{{ei}}" *ngFor="let g of this.s?.MyQuestionGroup;let ei=index;">
<div class="row">
<div class="col-lg-12">
<div class="card">
<div class="card-header">
<!-- <i class="fa fa-align-justify"></i> Combined All Table -->
<div class="row" style="position: relative;">
<div class="col-6 col-sm-4 col-md-2 col-xl mb-3 mb-xl-0">
<h5 style="text-align: left;">
{{g?.QuestionGroupName}}
<button type="button"
class="btn btn-success mr-1"
style="position:absolute;right: 10px;top:5px;"
(click)="isCollapsed = !isCollapsed"
[attr.aria-expanded]="!isCollapsed"
attr.aria-controls="qgroup-collapse-wrapper-g{{ei}}">
<i class="fa fa-align-justify"></i>
</button>
</h5>
</div>
</div>
</div>
<div [ngbCollapse]="isCollapsed" id="qgroup-collapse-wrapper-g{{ei}}">
<div class="card-body">
<div class="table-responsive">
sample text 1
</div>
</div>
</div>
</div>
</div>
<!--/.col-->
</div>
</div>
发生这种情况是因为 isCollapse 将所有卡片表示为一个个体。您需要做的是更改为布尔数组来表示每张卡片。
示例:
this.MyQuestionGroup = [
{
QuestionGroupName: "GroupName1"
},
{
QuestionGroupName: "GroupName2"
},
{
QuestionGroupName: "GroupName3"
}
];
for(let i=0; i<this.MyQuestionGroup.length; i++){
this.isCollapsed.push(false);
}
然后在你的 html:
(click)="isCollapsed[ei] = !isCollapsed[ei]"
[attr.aria-expanded]="!isCollapsed[ei]"
<div [ngbCollapse]="isCollapsed[ei]">
</div>
这是 stackblitz 中的工作示例 collapse card
我在我的 angular 9 应用程序中使用 ngb-bootstrap
折叠控件。
我已将 ngb-bootstrap
折叠控件放置在 bootstrap 卡片中,如您所见,下面的代码将生成多张卡片,我已将折叠按钮链接到卡片上 header 与那张特定卡片的卡片 body 所以当点击按钮时只有那张卡片折叠,而不是整个卡片组。我已将 aria-controls
属性设置为 ngbCollapse
div 的 id
,如以下代码所示。但我面临的问题是,当我单击按钮时,整个卡片组都折叠起来
<div class="animated fadeIn" style="margin-left: 2%;margin-right: 2%;margin-top: 2%;" id="qgroup-div-g{{ei}}" *ngFor="let g of this.s?.MyQuestionGroup;let ei=index;">
<div class="row">
<div class="col-lg-12">
<div class="card">
<div class="card-header">
<!-- <i class="fa fa-align-justify"></i> Combined All Table -->
<div class="row" style="position: relative;">
<div class="col-6 col-sm-4 col-md-2 col-xl mb-3 mb-xl-0">
<h5 style="text-align: left;">
{{g?.QuestionGroupName}}
<button type="button"
class="btn btn-success mr-1"
style="position:absolute;right: 10px;top:5px;"
(click)="isCollapsed = !isCollapsed"
[attr.aria-expanded]="!isCollapsed"
attr.aria-controls="qgroup-collapse-wrapper-g{{ei}}">
<i class="fa fa-align-justify"></i>
</button>
</h5>
</div>
</div>
</div>
<div [ngbCollapse]="isCollapsed" id="qgroup-collapse-wrapper-g{{ei}}">
<div class="card-body">
<div class="table-responsive">
sample text 1
</div>
</div>
</div>
</div>
</div>
<!--/.col-->
</div>
</div>
发生这种情况是因为 isCollapse 将所有卡片表示为一个个体。您需要做的是更改为布尔数组来表示每张卡片。
示例:
this.MyQuestionGroup = [
{
QuestionGroupName: "GroupName1"
},
{
QuestionGroupName: "GroupName2"
},
{
QuestionGroupName: "GroupName3"
}
];
for(let i=0; i<this.MyQuestionGroup.length; i++){
this.isCollapsed.push(false);
}
然后在你的 html:
(click)="isCollapsed[ei] = !isCollapsed[ei]"
[attr.aria-expanded]="!isCollapsed[ei]"
<div [ngbCollapse]="isCollapsed[ei]">
</div>
这是 stackblitz 中的工作示例 collapse card