Angular:带有* ngClass的条件类

我的Angular代码有什么问题? 我得到: Cannot read property 'remove' of undefined at BrowserDomAdapter.removeClass ...

 <ol class="breadcrumb"> <li *ngClass="{active: step==='step1'}" (click)="step='step1; '">Step1</li> <li *ngClass="{active: step==='step2'}" (click)="step='step2'">Step2</li> <li *ngClass="{active: step==='step3'}" (click)="step='step3'">Step3</li> </ol> 

[ngClass]=...而不是*ngClass

*仅用于例如可以使用的结构指令的简写语法

 <div *ngFor="let item of items">{{item}}</div> 

而不是更长的同等版本

 <template ngFor let-item [ngForOf]="items"> <div>{{item}}</div> </template> 

另见https://angular.io/docs/ts/latest/api/common/index/NgClass-directive.html

 <some-element [ngClass]="'first second'">...</some-element> <some-element [ngClass]="['first', 'second']">...</some-element> <some-element [ngClass]="{'first': true, 'second': true, 'third': false}">...</some-element> <some-element [ngClass]="stringExp|arrayExp|objExp">...</some-element> <some-element [ngClass]="{'class1 class2 class3' : true}">...</some-element> 

另请参阅https://angular.io/docs/ts/latest/guide/template-syntax.html

 <!-- toggle the "special" class on/off with a property --> <div [class.special]="isSpecial">The class binding is special</div> <!-- binding to `class.special` trumps the class attribute --> <div class="special" [class.special]="!isSpecial">This one is not so special</div> 
 <!-- reset/override all class names with a binding --> <div class="bad curly special" [class]="badCurly">Bad curly</div> 

Angular 2提供了一些添加条件的方法

有不同的types:

input一个

 [class.my-class]="step=='step1'" 

键入二

 [ngClass]="{'my-class': step=='step1'}" 

键入三

 [ngClass]="{1:'my-class1',2:'my-class2',3:'my-class4'}[step]" 

types四

 [ngClass]="(step=='step1')?'my-class1':'my-class2'" 

另一个解决scheme是使用[class.active]

例如:

 <ol class="breadcrumb"> <li [class.active]="step=='step1'" (click)="step='step1'">Step1</li> </ol> 

这是正常的结构:

[ngClass] =“{'classname':condition}”

所以在你的情况下,就像这样使用它:

 <ol class="breadcrumb"> <li [ngClass]="{'active': step==='step1'}" (click)="step='step1'">Step1</li> <li [ngClass]="{'active': step==='step2'}" (click)="step='step2'">Step2</li> <li [ngClass]="{'active': step==='step3'}" (click)="step='step3'">Step3</li> </ol> 

你应该使用下面的东西( [ngClass]而不是*ngClass ):

 <ol class="breadcrumb"> <li [ngClass]="{active: step==='step1'}" (click)="step='step1; '">Step1</li> (...) 

您可以使用ngClass来有条件地应用类名,而不是在Angular中

例如

 [ngClass]="'someClass'"> 

条件

 [ngClass]="{'someClass': property1.isValid"> 

多个条件

  [ngClass]="{'someClass': property1.isValid && property2.isValid}"> 

你也可以作为一个expression式来执行一个方法

 [ngClass]="getSomeClass()" 

这个方法会在你的组件里面

  getSomeClass(){ const isValid=this.property1 && this.property2; return {someClass1:isValid , someClass2:isValid}; } 

当我创build一个被动表单时,我必须在button上分配两种types的类。 这是我做到的:

 <button type="submit" class="btn" [ngClass]="(formGroup.valid)?'btn-info':''" [disabled]="!formGroup.valid">Sign in</button> 

当表单有效时,button有btn和btn-class(来自bootstrap),否则就是btn类。