This question already has an answer here:
- Hide/show individual items inside ngFor 5 answers
Can some one please let me know how to toggle icons while doing ngFor?
Problem Statement: I'm using *ngFor to loop through an array and display category names. On click of day I need to open an accordian and show category details (I can do this). Once accordian opens I need to replace fa-plus icon with fa-minus and vice-versa and I need to do this only for clicked day.
How can I achieve this effectively?
this.categoryList = [
{type: 'space', name: 'Space'},
{type: 'energy', name: 'Energy'},
{type: 'comfort', name: 'Comfort'},
{type: 'maintenance', name: 'Maintenance'},
{type: 'reporting', name: 'Reporting'}
];
HTML
<div class="{{category.type}}" *ngFor="let category of categoryList">
<div data-toggle="collapse" [attr.href]="'#'+'category-'+category.type">
<div class="title {{category.name}}">{{category.name}}</div>
<div>
<i class="fa fa-plus"></i> //needs to toggle between plus and minus
<i class="fa fa-minus"></i> //needs to toggle between plus and minus
</div>
</div>
<div class="collapse" id="category-{{category.type}}">
//details
</div>
</div>
If I understand you right you can have just one
<i>
on the page instead of having two:template:
ts:
So you can toggle just toggle classes on that element to be
fa-plus
orfa-minus
You can put
(click)="toggle[i] = !toggle[i]
on any html element inside your*ngFor
temlpate so it will trigger the toggle on click for related<i>
element.1) You will need a variable that stores which day is currently selected.
2) Then on click, set selected day,
3) Check if selected day is the same day in loop using
*ngIf
orhidden
Your final HTML should look like this -
This should work.