Jon*_*han 4 javascript conditional class angular
我试图找出如何仅在单击的按钮active上切换类:
这是我目前的代码......
<div class="btn-group">
<button class="btn btn-secondary" [ngClass]="{ 'active' : isActive }" (click)="isActive = !isActive" type="button">Premier bouton</button>
<button class="btn btn-secondary" [ngClass]="{ 'active' : isActive }" (click)="isActive = !isActive" type="button">Second bouton</button>
<button class="btn btn-secondary" [ngClass]="{ 'active' : isActive }" (click)="isActive = !isActive" type="button">Troisième bouton</button>
<button class="btn btn-secondary" [ngClass]="{ 'active' : isActive }" (click)="isActive = !isActive" type="button">Quatrième bouton</button>
</div>
Run Code Online (Sandbox Code Playgroud)
......这就是结果:
我不使用 *ngFor或ng-repeat原则.我知道我需要隔离每个按钮.我怎样才能做到这一点?
添加this.到isActive不行:this.isActive.
我只会为每个按钮使用一个唯一的字符串。例如:
<div class="btn-group">
<button class="btn btn-secondary" [class.active]="isActive('btn1')" (click)="setActive('btn1')" type="button">Premier bouton</button>
<button class="btn btn-secondary" [class.active]="isActive('btn2')" (click)="setActive('btn2')" type="button">Second bouton</button>
<button class="btn btn-secondary" [class.active]="isActive('btn3')" (click)="setActive('btn3')" type="button">Troisième bouton</button>
<button class="btn btn-secondary" [class.active]="isActive('btn4')" (click)="setActive('btn4')" type="button">Quatrième bouton</button>
</div>
Run Code Online (Sandbox Code Playgroud)
您的setActive和Isactive函数看起来像这样:
this.setActive = function (buttonName){
this.activeButton = buttonName;
}
this.isActive = function (buttonName){
return this.activeButton === buttonName;
}
Run Code Online (Sandbox Code Playgroud)
所以每个按钮都会传递它的名字,它只是一些唯一的字符串。该字符串将被保存为变量,并将用于确定是否应应用活动类。
您还会注意到您可以通过绑定到类名来切换单个类。就像我上面为活动类所做的那样,它可以与 [class.active] 绑定。
简单,只需使用事件委派.
Component.html:
<div class="btn-group" (click)="onButtonGroupClick($event)">
<button class="btn btn-secondary" type="button">Premier bouton</button>
<button class="btn btn-secondary" type="button">Second bouton</button>
<button class="btn btn-secondary" type="button">Troisième bouton</button>
<button class="btn btn-secondary" type="button">Quatrième bouton</button>
</div>
Run Code Online (Sandbox Code Playgroud)
Component.ts/.js:
onButtonGroupClick($event){
let clickedElement = $event.target || $event.srcElement;
if( clickedElement.nodeName === "BUTTON" ) {
let isCertainButtonAlreadyActive = clickedElement.parentElement.querySelector(".active");
// if a Button already has Class: .active
if( isCertainButtonAlreadyActive ) {
isCertainButtonAlreadyActive.classList.remove("active");
}
clickedElement.className += " active";
}
}
Run Code Online (Sandbox Code Playgroud)
实例:https://plnkr.co/edit/EE4dOMgpY8QA2qZXjMiW?p = preview
| 归档时间: |
|
| 查看次数: |
7747 次 |
| 最近记录: |