Angular 6-在单击的项目上切换类别,并在其他项目上切换类别

时间:2019-03-07 21:07:22

标签: angular ng-class

我有一个Angular循环,该循环返回数据库中的项目列表。在每个项目的内部都有一个数组(这是第二个*ngFor循环所在的位置。)

第二个循环(*ngFor="let option of item.options)将有四个结果。当我单击带有问题类别的<li>时,我想添加一个类别以突出显示它。但是,如果我单击另一个<li>(例如,第4个选项中的第3个),则想向该类添加一个类,但要从单击的第一个<li>中删除它。

<ul>
  <li *ngFor="let item of items | async">
    <div>{{ item.title }}</div>
    <div>{{ item.question }}</div>
    <ul>
      <li class="question" *ngFor="let option of item.options">
        {{option}}
      </li>
    </ul>
  </li>
</ul>

可能值得注意的是,在第一个循环*ngFor="let item of items | async"

中,我最多可以有15个项目

2 个答案:

答案 0 :(得分:2)

最简单的方法是使用一个变量,例如单击“ itemSelect”并在* ngFor =“ ..; let i = index”中使用,单击变量等于i并使用[ngClass]或[className]。由于您有两个* ngFor,因此需要一个变量数组

<!--take acount the let i=index-->
<li *ngFor="let item of items | async;let i=index">
   ...
    <ul>
      <!--use itemSelect[i]-->
      <li [className]="j==itemSelect[i]?'question hightligth':'question'
          *ngFor="let option of item.options;let j=index" 
           (click)="itemSelect[i]=j">
            {{option}}
      </li>
    </ul>
<li>

别忘了在ts中声明

itemSelect:number[]=[]

答案 1 :(得分:0)

您可以通过如下更新html来实现此目的

<ul>
  <li *ngFor="let item of items; let i = index">
    <div>{{ item.title }}</div>
    <div>{{ item.question }}</div>
    <ul>
    <li class="question"
        [class.active]="i == parentIndex && j == childIndex"
        (click)="setClickedRow(i, j)"
        *ngFor="let option of item.options; let j = index">
        {{ option }}
    </li>
    </ul>
  </li>
</ul>

最后,您需要按如下方式更新ts文件

parentIndex : Number;
childIndex : Number;

setClickedRow(i,j){
 this.parentIndex=i;
 this.childIndex = j;
}