我的Angular代码出了什么问题?我得到了:
Cannot read property 'remove' of undefined at BrowserDomAdapter.removeClass ...
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>
答案 0 :(得分:606)
Angular 2,..,7提供了几种有条件地添加类的方法:
输入一个
[class.my-class]="step=='step1'"
输入二
[ngClass]="{'my-class': step=='step1'}"
和多个选项:
[ngClass]="{'my-class': step=='step1', 'my-class2':step=='step2' }"
键入三
[ngClass]="{1:'my-class1',2:'my-class2',3:'my-class4'}[step]"
输入四个
[ngClass]="(step=='step1')?'my-class1':'my-class2'"
答案 1 :(得分:384)
[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>
答案 2 :(得分:68)
另一种解决方案是使用[class.active]
。
示例:
<ol class="breadcrumb">
<li [class.active]="step=='step1'" (click)="step='step1'">Step1</li>
</ol>
答案 3 :(得分:53)
这是doPost(e)
的正常结构:
ngClass
所以在你的情况下,就像这样使用它......
[ngClass]="{'classname' : condition}"
答案 4 :(得分:33)
通过以下示例,您可以使用&#39; IF ELSE&#39;
<p class="{{condition ? 'checkedClass' : 'uncheckedClass'}}">
<p [ngClass]="condition ? 'checkedClass' : 'uncheckedClass'">
<p [ngClass]="[condition ? 'checkedClass' : 'uncheckedClass']">
答案 5 :(得分:29)
您可以使用ngClass有条件地应用类名,而不是Angular
例如
[ngClass]="'someClass'">
<强>条件强>
[ngClass]="{'someClass': property1.isValid}">
多个条件
[ngClass]="{'someClass': property1.isValid && property2.isValid}">
方法表达
[ngClass]="getSomeClass()"
此方法将在您的组件内部
getSomeClass(){
const isValid=this.property1 && this.property2;
return {someClass1:isValid , someClass2:isValid};
}
答案 6 :(得分:11)
您应该使用某些内容([ngClass]
代替*ngClass
):
<ol class="breadcrumb">
<li [ngClass]="{active: step==='step1'}" (click)="step='step1; '">Step1</li>
(...)
答案 7 :(得分:5)
当我创建一个反应形式时,我不得不在按钮上分配两种类型的类。我就这样做了:
<button type="submit" class="btn" [ngClass]="(formGroup.valid)?'btn-info':''"
[disabled]="!formGroup.valid">Sign in</button>
当表单有效时,按钮有btn和btn-class(来自bootstrap),否则只有btn类。
答案 8 :(得分:5)
延长MostafaMashayekhi他对第二选项的回答&gt; 您还可以使用','
链接多个选项[ngClass]="{'my-class': step=='step1', 'my-class2':step=='step2' }"
此外,* ngIf可用于某些情况,通常与* ngFor
结合使用class="mats p" *ngIf="mat=='painted'"
答案 9 :(得分:4)
在Angular 7.X
CSS类的更新如下,具体取决于表达式求值的类型:
string-添加字符串(以空格分隔)中列出的CSS类
Array-添加了声明为Array元素的CSS类
对象-键是CSS类,当值中给出的表达式计算为真实值时会添加键,否则它们将被删除。
<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>
答案 10 :(得分:4)
您可以使用[ngClass]或[class.classname],两者的作用相同。
[class.my-class]="step==='step1'"
或
[ngClass]="{'my-class': step=='step1'}"
两者都一样!
答案 11 :(得分:3)
这对我有用
[ngClass]="{'active': dashboardComponent.selected_menu == 'profile'}"
答案 12 :(得分:3)
此外,您还可以添加方法功能:
在HTML中
<div [ngClass]="setClasses()">...</div>
在component.ts中
// Set Dynamic Classes
setClasses() {
let classes = {
constantClass: true,
'conditional-class': this.item.id === 1
}
return classes;
}
答案 13 :(得分:2)
让我们说,YourCondition是您的条件或布尔属性,那么就可以这样做
[class.yourClass]="YourCondition"
答案 14 :(得分:2)
我们可以使用以下语法使类动态化。在Angular 2 plus中,您可以通过多种方式执行此操作:
[ngClass]="{'active': arrayData.length && arrayData[0]?.booleanProperty}"
[ngClass]="{'active': step}"
[ngClass]="step== 'step1'?'active':''"
[ngClass]="step? 'active' : ''"
答案 15 :(得分:1)
<div class="collapse in " [ngClass]="(active_tab=='assignservice' || active_tab=='manage')?'show':''" id="collapseExampleOrganization" aria-expanded="true" style="">
<ul> <li class="nav-item" [ngClass]="{'active': active_tab=='manage'}">
<a routerLink="/main/organization/manage" (click)="activemenu('manage')"> <i class="la la-building-o"></i>
<p>Manage</p></a></li>
<li class="nav-item" [ngClass]="{'active': active_tab=='assignservice'}"><a routerLink="/main/organization/assignservice" (click)="activemenu('assignservice')"><i class="la la-user"></i><p>Add organization</p></a></li>
</ul></div>
如果有其他条件,代码是ngClass的一个很好的例子。
[ngClass]="(active_tab=='assignservice' || active_tab=='manage')?'show':''"
[ngClass]="{'active': active_tab=='assignservice'}"
答案 16 :(得分:1)
尝试这样。.
用''
定义班级<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>
答案 17 :(得分:1)
ngClass
语法:
[ngClass]="{'classname' : conditionFlag}"
您可以这样使用:
<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>
答案 18 :(得分:1)
对于 elseif
语句(较少比较)使用如下:(例如您比较三个语句)
<div [ngClass]="step === 'step1' ? 'class1' : (step === 'step2' ? 'class2' : 'class3')"> {{step}} </div>
答案 19 :(得分:0)
与[ngClass]
指令无关,但我也遇到了与
无法在...读取未定义的属性“删除”
我以为是我的[ngClass]
条件下的错误,但事实证明我在[ngClass]
条件下尝试访问的属性未初始化。
就像我的打字稿文件中有这个
element: {type: string};
然后在我的[ngClass]
中使用
[ngClass]="{'active', element.type === 'active'}"
我收到错误消息
无法读取未定义的属性“类型” ...
解决方案是将我的财产固定为
element: {type: string} = {type: 'active'};
希望它可以帮助尝试匹配[ngClass]
中属性条件的人
答案 20 :(得分:0)
Angular 提供了多种方式来有条件地添加类:
第一种方式
active 是你的班级名称
[class.active]="step === 'step1'"
第二种方式
active 是你的班级名称
[ngClass]="{active': step=='step1'}"
第三种方式
通过使用三元运算符 class1 和 class2 是您的类名
[ngClass]="(step=='step1')?'class1':'class2'"
答案 21 :(得分:0)
指令以三种不同的方式运行,具体取决于表达式计算的三种类型中的哪一种:
[class.class_one] = "step === 'step1'"
[ngClass]="{'class_one': step === 'step1'}"
对于多个选项:
[ngClass]="{'class_one': step === 'step1', 'class_two' : step === 'step2' }"
[ngClass]="{1 : 'class_one', 2 : 'class_two', 3 : 'class_three'}[step]"
[ngClass]="step == 'step1' ? 'class_one' : 'class_two'"