本文翻译自:Angular: conditional class with *ngClass
What is wrong with my Angular code? 我的Angular代码有什么问题? I am getting: 我正进入(状态:
Cannot read property 'remove' of undefined at BrowserDomAdapter.removeClass ...
HTML 的HTML
<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>
#1楼
参考:https://stackoom.com/question/2Nz7j/Angular-带-ngClass的条件类
#2楼
[ngClass]=...
instead of *ngClass
. [ngClass]=...
而不是*ngClass
。
*
is only for the shorthand syntax for structural directives where you can for example use *
仅用于结构指令的简写语法,您可以在其中使用
<div *ngFor="let item of items">{{item}}</div>
instead of the longer equivalent version 而不是更长的等效版本
<template ngFor let-item [ngForOf]="items">
<div>{{item}}</div>
</template>
See also https://angular.io/docs/ts/latest/api/common/index/NgClass-directive.html 另请参阅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>
See also https://angular.io/docs/ts/latest/guide/template-syntax.html 另请参阅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>
#3楼
You should use something ( [ngClass]
instead of *ngClass
) like that: 您应该使用类似以下内容( [ngClass]
而不是*ngClass
):
<ol class="breadcrumb">
<li [ngClass]="{active: step==='step1'}" (click)="step='step1; '">Step1</li>
(...)
#4楼
Another solution would be using [class.active]
. 另一种解决方案是使用[class.active]
。
Example : 范例:
<ol class="breadcrumb">
<li [class.active]="step=='step1'" (click)="step='step1'">Step1</li>
</ol>
#5楼
Angular 2,..,7 provides several ways to add classes conditionally: Angular 2,..,7提供了几种有条件地添加类的方法:
type one 第一类
[class.my-class]="step=='step1'"
type two 第二类
[ngClass]="{'my-class': step=='step1'}"
and multiple option: 和多个选项:
[ngClass]="{'my-class': step=='step1', 'my-class2':step=='step2' }"
type three 第三类
[ngClass]="{1:'my-class1',2:'my-class2',3:'my-class4'}[step]"
type four 四类
[ngClass]="(step=='step1')?'my-class1':'my-class2'"
#6楼
That's the normal structure for ngClass
is: ngClass
的正常结构是:
[ngClass]="{'classname' : condition}"
So in your case, just use it like this... 因此,就您而言,就这样使用它...
<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>