I have three div's
<div class = "form">
<div class = "group"></div>
<div class = "group"></div>
<div class = "group"></div>
</div>
Now, i want to add class 'active' with 'group' class on click. By default it should be present on the first 'group' class div. 'active' class can only be present at one div at a time
.ts
file:
selectStatus: boolean = false;
selectGroup() {
this.selectStatus = !this.selectStatus;
}
.html
file:
<div class = "form">
<div class = "group" (click) = "selectGroup()" [ngClass]="{selectStatus ? 'active' : 'not-active'}"></div>
<div class = "group" (click) = "selectGroup()" [ngClass]="{selectStatus ? 'active' : 'not-active'}"></div>
<div class = "group" (click) = "selectGroup()" [ngClass]="{selectStatus ? 'active' : 'not-active'}"></div>
</div>
But it's adding the active
class on all the div
s
<div class = "form">
<div class = "group" (click) = "selectGroup()" [ngClass]="{selectStatus ? 'active' : 'not-active'}"></div>
<div class = "group" (click) = "selectGroup()" [ngClass]="{selectStatus ? 'active' : 'not-active'}"></div>
<div class = "group" (click) = "selectGroup()" [ngClass]="{selectStatus ? 'active' : 'not-active'}"></div>
</div>
selectStatus: boolean = false;
selectGroup() {
this.selectStatus = !this.selectStatus;
}
It coming on all div's
.ts
file:
activeDivIndex: number = 0;
selectGroup(activeDivIndex: number) {
this.activeDivIndex= activeDivIndex;
}
View:
<div class = "form">
<div class = "group" (click) = "selectGroup(0)" [ngClass]="activeDivIndex == 0? 'active' : 'not-active'"></div>
<div class = "group" (click) = "selectGroup(1)" [ngClass]="activeDivIndex == 1? 'active' : 'not-active'"></div>
<div class = "group" (click) = "selectGroup(2)" [ngClass]="activeDivIndex == 2? 'active' : 'not-active'"></div>
</div>
Better yet, you could use an ngFor
and check if the current index is the same as activeDivIndex
.ts
file:
groupList: Array<Object> = [{foo: "Foo 1", bar: "Bar 1"}, {foo: "Foo 2", bar: "Bar 2"}, {foo: "Foo 3", bar: "Bar 3"}];
activeDivIndex: number = 0;
selectGroup(activeDivIndex: number) {
this.activeDivIndex= activeDivIndex;
}
View:
<div class = "form">
<div *ngFor="let groupItem of groupList, let i = index" class="group" (click)="selectGroup(i)" [ngClass]="activeDivIndex === i ? 'active' : 'not-active'">Foo: {{groupItem.foo}}, Bar: {{groupItem.bar}}</div>
</div>
or if you don't need the not-active
class:
<div class = "form">
<div *ngFor="let groupItem of groupList, let i = index" class="group" (click)="selectGroup(i)" [ngClass]="{'active': activeDivIndex === i}">Foo: {{groupItem.foo}}, Bar: {{groupItem.bar}}</div>
</div>
You can update your code as follows:
.html
<div class = "form">
<div class = "group" (click) = "selectGroup(0)" [ngClass]="{'active': selectStatus[0]}"></div>
<div class = "group" (click) = "selectGroup(1)" [ngClass]="{'active': selectStatus[1]}"></div>
<div class = "group" (click) = "selectGroup(2)" [ngClass]="{'active': selectStatus[2]}"></div>
</div>
.ts
selectStatus = [true, false, false];
selectGroup(id) {
this.selectStatus = this.selectStatus.map((item, index) => {
if (index === id) {
return true;
}
return false;
})
}
Working sample is given here: Stackblitz
The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.