javascript - Angular2:如何在类似元素上切换类
问题描述
我希望能够在单击时切换颜色。现在,当我单击一个时,它会将它们全部切换。我想单独切换每一个。
HTML:
<div class="crit-desc crit-item-flags">
<i class="fal fa-flag" (click)="flagActive()" [ngClass]="flagStatus ? 'flagActive' : 'flagNotActive'"></i>
<i class="fal fa-bookmark" (click)="flagActive()" [ngClass]="flagStatus ? 'flagActive' : 'flagNotActive'"></i>
<i class="fal fa-alarm-clock" (click)="flagActive()" [ngClass]="flagStatus ? 'flagActive' : 'flagNotActive'"></i>
</div>
JS:
import { Component } from '@angular/core';
@Component({
selector: 'app-aside',
templateUrl: './app-aside.component.html'
})
export class AppAsideComponent {
closeResult: string;
flagStatus: boolean;
constructor(private modalService: NgbModal) { }
flagActive(){
this.flagStatus = !this.flagStatus;
}
}
解决方案
我想说的第一件事是,您正在使用单个变量来控制所有元素的类,并且该变量会在单击它们中的任何一个时发生变化,所以是的.. 那行不通,不知何故,它们需要不同的范围他们自己的。
我无法说出您的问题的优化解决方案是什么,但这就是目前令我印象深刻的。
我创建了一个指令并添加了所有元素,然后通过指令本身控制类。
<!-- buttons for simplicity -->
<button appToggleColor class="yellow">Button3</button>
<button appToggleColor class="yellow">Button2</button>
<button appToggleColor class="yellow">Button1</button>
constructor(private renderer: Renderer2) { }
private flag = true
@HostListener('click', ['$event']) onClick($event: Event) {
this.flag = !this.flag;
if (this.flag) {
this.renderer.removeClass($event.target, 'green');
this.renderer.addClass($event.target, 'yellow')
}
else {
this.renderer.removeClass($event.target, 'yellow');
this.renderer.addClass($event.target, 'green');
}
}
我Rendere2
用来添加/删除类.. https://stackblitz.com/edit/angular-zdbsbp?file=src%2Fapp%2Ftoggle-color.directive.ts
推荐阅读
- php - 从函数内部访问 PHP 对象
- flutter - Flutter AnimationController 侦听器未触发
- html - 如何为干净的文档大纲正确使用基本的 HTML5 部分?
- python - 从“列表”末尾获取 Twitter 上的用户关注者
- html - 我不能减少六边形元素的高度和宽度
- javascript - 尝试遍历对象数组以使用对象中的数据填充数组
- linux - 如何编写显示该位置所有子目录的脚本
- c++ - 在 C++ 中重载 += 以将一个对象添加到另一个对象中
- r - 无法在 ubuntu 外访问 Rshiny 应用程序的 http://localhost:3838/Rshiny/
- swift - 无法在 Bundle 项目中的 NSWindowController 中动态更改实例化视图,但能够在 Cocoa 应用程序中