简体   繁体   English

* NgFor中的带条件的类

[英]Conditional class in *NgFor with angular

I have this html code: 我有这个html代码:

 <div class="chip-idiomas">
    <mat-chip-list multiple [selectable]="true">
      <mat-chip *ngFor="let idioma of idiomas"
                class="chip"
                [ngClass]="{'chip-selecionado' : isClassVisible}"
                [selected]="idioma"
                (click)="isClassVisible = !isClassVisible;changeSelected('s', idioma)">
        {{ idioma.nome }}
      </mat-chip>
    </mat-chip-list>
  </div>

When I click on the chip, the class change in all , not just in the chip clicked. 当我单击芯片时,所有类均发生变化,而不仅仅是单击的芯片。 I'm using Angular 5. 我正在使用Angular 5。

I wish just the clicked element changed the css 我希望只是单击元素更改了CSS

See this pic before and after 看到这张照片之前和之后

before : 之前 在此处输入图片说明

after : 之后 在此处输入图片说明

can Someone help? 有人可以帮忙吗?

I would suggest you to store index in isClassVisible and rename it to something like visibleClassIndex , and check in [ngClass] if current class is visible by checking current index with visibleClassIndex , since there will be 0 index, which is false value, I would suggest you to define visibleClassIndex type as null | number 我建议您将index存储在isClassVisible ,并将其重命名为visibleClassIndex ,然后通过用visibleClassIndex检查当前index来检查[ngClass]当前类是否可见,因为将有0索引,这是false值,我建议您将visibleClassIndex类型定义为null | number null | number or undefined | number null | numberundefined | number undefined | number and do check like so visibleClassIndex !== null && visibleClassIndex === i or visibleClassIndex !== undefined && visibleClassIndex === i , if you will choose null make sure to assign null as default value visibleClassIndex: null | number = null; undefined | number ,并像这样进行检查visibleClassIndex !== null && visibleClassIndex === ivisibleClassIndex !== undefined && visibleClassIndex === i ,如果您选择null确保将null为默认值visibleClassIndex: null | number = null; visibleClassIndex: null | number = null; , I would suggest to use undefined , because with it you don't need to define default type, since it automatically will be undefined ,我建议您使用undefined ,因为有了它,您不需要定义默认类型,因为它会自动变为undefined

 <div class="chip-idiomas">
    <mat-chip-list multiple [selectable]="true">
      <mat-chip *ngFor="let idioma of idiomas"
                class="chip"
                [ngClass]="{'chip-selecionado' : visibleClassIndex !== undefined && visibleClassIndex === i}"
                [selected]="idioma"
                (click)="visibleClassIndex = i;changeSelected('s', idioma)">
        {{ idioma.nome }}
      </mat-chip>
    </mat-chip-list>
  </div>

Solution:- 解:-

Stackblitz Link:- https://stackblitz.com/edit/angular-material-jyzotv?file=app%2Fapp.component.html Stackblitz链接:-https://stackblitz.com/edit/angular-material-jyzotv?file = app%2Fapp.component.html

 <div class="chip-idiomas">
    <mat-chip-list multiple [selectable]="true">
      <mat-chip *ngFor="let idioma of idiomas;let isFirst = first"
                  [selected]="tab === idioma"
                  class="chip"
                 [class.active]="tab === idioma"
               (click)="activateClass(idioma)">
        {{ idioma }}
      </mat-chip>
    </mat-chip-list>
  </div>

  <div class="chip-idiomas">
    <mat-chip-list multiple [selectable]="true">
      <mat-chip *ngFor="let idioma of idiomas;let isFirst = first"
                  class="chip"
                 [class.active]="tab === idioma"
               (click)="activateClass(idioma)">
        {{ idioma }}
      </mat-chip>
    </mat-chip-list>
  </div>

-- -

export class AppComponent  {
  idiomas = ['A','B','C']
  tab = this.idiomas[0];

  activateClass(subModule){
  this.tab = subModule;    
}
}

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM