Reputation: 31
I have written the code for dynamic accordions it showing the design correctly but functionalies(hide/show) are not working. Below i have shared the code please help me in this problem.
HTML
<div class="form-group">
<div class="accordion ms-auto col-sm-10" id="accordionExample" *ngFor="let category of categories;let i = index">
<div class="accordion-item">
<h2 class="accordion-header" id="'heading'+i">
<button class="accordion-button" [ngClass]="{ 'collapsed': i != 0 }" type="button" data-bs-toggle="collapse"
attr.data-target="'#collapse'+i" [attr.aria-controls]="'collapse'+i" aria-expanded="true" aria-controls="collapseOne">
{{category.title}}
</button>
</h2>
<div id="'collapse'+i" class="accordion-collapse collapse show" *ngFor="let item of category.symptoms"
data-bs-parent="#accordionExample" [ngClass]="{ 'show': i == 0 }" [attr.aria-labelledby]="'heading'+i">
<div class="accordion-body">
<div class="boxes" style="width:180px;height: 100px;background-color: rgb(236, 243, 253);border-radius: 10px;">
<input type="checkbox" style="margin-left: 10px;margin-top: 10px;"> {{item.title}}
</div>
</div>
</div>
</div>
</div>
</div>
Upvotes: 0
Views: 1455
Reputation: 1094
Whenever you want to bind dynamic value to any HTML attribute, you need to use property binding. That means you need to use square brackets. for example,
<div [id]="'collapse' + i">
Where i
is your variable which is defined in *ngFor
loop.
In your case it would be like this.
<div class="form-group">
<div class="accordion ms-auto col-sm-10" id="accordionExample" *ngFor="let category of categories;let i = index">
<div class="accordion-item">
<h2 class="accordion-header" [id]="'heading'+i">
<button class="accordion-button" [ngClass]="{ 'collapsed': i != 0 }" type="button" data-bs-toggle="collapse"
[attr.data-target]="'#collapse'+i" [attr.aria-controls]="'collapse'+i" aria-expanded="true" aria-controls="collapseOne">
{{category.title}}
</button>
</h2>
<div [id]="'collapse'+i" class="accordion-collapse collapse show" *ngFor="let item of category.symptoms"
data-bs-parent="#accordionExample" [ngClass]="{ 'show': i == 0 }" [attr.aria-labelledby]="'heading'+i">
<div class="accordion-body">
<div class="boxes" style="width:180px;height: 100px;background-color: rgb(236, 243, 253);border-radius: 10px;">
<input type="checkbox" style="margin-left: 10px;margin-top: 10px;"> {{item.title}}
</div>
</div>
</div>
</div>
</div>
</div>
Upvotes: 1