Reputation: 1553
I have created several div through ngfor directive.
<div class="card" *ngFor="let item of list" [ngClass]="{'is-collapsed': isCollapsed , 'is-expanded':!isCollapsed}" (click)="toggle()">
<div class="card__inner " [ngClass]="{'js-expander': isCollapsed}">
<span>Card</span>
<mat-icon class="fa fa-folder-o">folder</mat-icon>
</div>
<div class="card__expander">
<mat-icon class="fa fa-close" [ngClass]="{'js-collapser': isCollapsed}" >close</mat-icon>
Expander
</div>
</div>
Now if i click on toggle function it should expand the particular div only. But it expand all the div. How can fix it? here is my toggle fucntion look like:
isCollapsed: boolean;
list = [{a:1},{a:1},{a:1}]
constructor() { }
ngOnInit() {
this.isloading = true;
this.isCollapsed = true;
}
toggleIsCollapsed() {
this.isCollapsed = !this.isCollapsed;
}
How can i reference a particular which will expand based on click? what modification should i do?
Upvotes: 2
Views: 349
Reputation: 1861
Why not write a directive to toggle a class on the element? Then you can reuse it throughout passing the class as an input.
import {Directive, ElementRef, Input} from '@angular/core';
@Directive({
selector: '[toggle-class]',
host: {
'(click)': "toggleClass()"
}
})
export class ToggleClassDirective {
@Input() toggle_class: string = 'is-collapsed';
private el:ElementRef;
constructor(el: ElementRef) {
this.el = el;
}
toggleClass() {
this.el.nativeElement.classList.toggle(this.toggle_class);
}
}
Then in your HTML
<div class="card" toggle-class toggle_class="is-collapsed"></div>
Upvotes: 1
Reputation: 22213
Try like this:
<div class="card" *ngFor="let item of list; let i=index"
[ngClass]="{'is-collapsed': item.isCollapsed , 'is-expanded':!isCollapsed}"
(click)="item.isCollapsed = !item.isCollapsed ">
<div class="card__inner " [ngClass]="{'js-expander': item.isCollapsed}">
<span>Card</span>
<mat-icon class="fa fa-folder-o">folder</mat-icon>
</div>
<div class="card__expander">
<mat-icon class="fa fa-close" [ngClass]="{'js-collapser': item.isCollapsed}">close</mat-icon>
Expander
</div>
</div>
Upvotes: 1