如何将 class 添加到 ngFor 循环中的特定 `li` 标签?

how to add class to particular `li` tag in ngFor loop?

我正在尝试在 ngFor 循环的 li 标记中鼠标悬停时添加 class。但是当鼠标悬停在 li 标签上时,所有 li 标签 btn-success class 都会被添加。如何将 class 添加到 ngFor 循环中的特定 li 标记?

<li class="hhwtmainmenu" *ngFor="let headermenu of headermenus.header; let i=index; " [class.btn-success]="mouseOvered" (mouseout)="mouseOvered=false" (mouseover)="mouseOvered=true">
    {{headermenu.title}}
</li>

您还必须根据您的要求添加第二个条件,例如 [class.btn-success]="mouseOvered && xxxx==yyyyy"

示例:假设您只想在 headermenu 标题为 "test" 时添加 class,那么您必须按如下方式编写上述逻辑。

[class.btn-success]="mouseOvered && headermenu.title=='test'"

试试这个:

HTML :

<li class="hhwtmainmenu" *ngFor="let headermenu of headermenus.header; let i = index "  [ngClass]="{'btn-success': (i == 2)}" (mouseout)="mouseOvered=false" (mouseover)="mouseOvered=true">
{{headermenu.title}}
</li>

风格:

.btn-success:hover {
    background:blue;
}

仅当需要某些业务逻辑来决定 属性 时,才应使用 angular 绑定(即在您的情况下为 CSS class)。应避免绑定,因为它会导致 angular 由于其更改检测和生命周期挂钩而导致过度计算。

对于您的情况,您只想在悬停时添加样式,您可以对 li 元素使用 :hover class。

.hhwtmainmenu:hover {
    // The Styling you added in btn-success class
}

虽然我的方法不使用任何 angular 指令,但它会提高代码的性能。

不是一个很好的解决方案,但可以为您解决问题。

<ul><li class="hhwtmainmenu"
  *ngFor="let headermenu of headermenus.header; let i=index; "
  [class.btn-success]="selectedIndex === i"
  (mouseout)="removeIndex(i)"
  (mouseover)="setIndex(i)">
{{headermenu.title}}
</li>
</ul>

对于组件文件中的方法:

  setIndex(index: number) {
this.selectedIndex = index;
}
removeIndex(index: number) {
this.selectedIndex = null;
}
have a look at this this 

app.component.html

<div class="ul">
  <li
   *ngFor="let number of numbers;let i=index"
    [class.selectedd]="i===selectedIndex"

    (click)=toggleClass(i)>
    {{number}} {{i}}
  </li>
</div>


app.component.ts

import { Component } from "@angular/core";

@Component({
  selector: "my-app",
  templateUrl: "./app.component.html",
  styleUrls: ["./app.component.css"]
})
export class AppComponent {
  name = "Angular";
  selected = false;

  selectedIndex = -1;

  numbers = [10, 20, 30, 40, 50];

  toggleClass(index: number) {
    this.selectedIndex = this.selectedIndex === index ? -1 : index;
  }
  getCondition() {
    return this.selected;
  }
}

app.component.css

.selectedd{
  color:red;
}