【问题标题】:Angular 2: Adding ngClass to the element based on the click eventAngular 2:基于点击事件向元素添加ngClass
【发布时间】:2017-05-26 04:15:24
【问题描述】:

我希望 Clicked 类一次仅应用于一个单击的元素。单击其他元素后,第一个单击的元素不应再具有该类。它应该有点像这样。单击该特定元素。

  .rangeContainer{
    width: 100%;
    height: 46px;
    }
    .range{
      height: 42px;
      background-color: #F6F6F6;
      color: #035688;
      font-size: 12px;
      font-weight: 800;
      line-height: 46px;
      padding: 15px 20px;
      cursor: pointer;
    }
    .clicked{
      background-color: white;
      color: #7A232E;
      border-top: 6px solid #7A232E;
    }
  
I want the 
   
<div class="rangeContainer">
    <span (click)="click = !click" [ngClass]="{'clicked' : click}" class="range">K4 - K5</span>
    <span (click)="click = !click" [ngClass]="{'clicked' : click}"class="range">1ST - 2ND</span>
    <span (click)="click = !click" [ngClass]="{'clicked' : click}"class="range">3RD - 4TH</span>
    <span (click)="click = !click" [ngClass]="{'clicked' : click}"class="range">5TH - 8TH</span>
</div>

【问题讨论】:

    标签: html css angular ng-class


    【解决方案1】:
    <span
      *ngFor="let range of ['K4 - K5', '1ST - 2ND', '3RD - 4TH', '5TH - 8TH']; let i = index"
      (click)="activeIndex = i"
      [ngClass]="{ clicked : activeIndex === i }" class="range" >
      {{ range }}
    </span>
    

    Plunker Example

    【讨论】:

    • 有没有办法在点击外部时停用课程?这真的很有帮助。
    • 太棒了!!如果你不介意你能解释一下 $event.stopPropagation() 做什么,我可以在任何地方使用它。我使用过 (click)="function($event)" 但从未使用过 $event.stopPropagation()。
    • 这段代码的问题是即使我在外面点击它也不会停止监听主机事件。想要的效果是一旦在元素外部单击就停止监听单击事件。我已将控制台语句添加到 HostListener 以供您参考。 plnkr.co/edit/3v3nFL?p=preview
    • 另一种方法是使用Renderer plnkr.co/edit/u7Lwn6?p=preview
    • 我非常想要,但我至少需要 15 个声望点,现在我有 12 个,所以我无法......它确实解决了我的问题,我会尽快投票15.
    【解决方案2】:

    在组件中:

    // Insert your real labels here
    this.items = [{label: 'item 1'}, {label: 'item 2'}];
    

    然后使用*ngFor:

    <div class="rangeContainer">
        <span *ngFor="let item of items" (click)="toggleClick(item)" [ngClass]="{'clicked' :item.isClicked}" class="range">{{item.label}}</span>
    </div>
    

    然后像这样切换:

    toggleClick(clickedItem: any): void {
    
      for (let item of items) {
        item.isClicked = false;
      }
    
      clickedItem.isClicked = true;
    }
    

    这将确保一次只点击一项。我正在使用循环,因此我可以将单击状态存储在对象上。它让生活更轻松。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-01-18
      • 2017-07-03
      • 1970-01-01
      • 2016-10-31
      相关资源
      最近更新 更多