我的Angular代码有什么问题?我正在获取:
无法读取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>
 


评论

angulartutorial.net/2017/12/…

#1 楼

Angular 2+提供了几种有条件地添加类的方法:
类型一
[class.my-class]="step === 'step1'"

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

和多个选项:
[ngClass]="{'my-class': step === 'step1', 'my-class2':step === 'step2' }"

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

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


评论


完美的答案,只需将类型2修改为:[ngClass] =“ {'my-class':step =='step1'}”使用''int类名

– Adriano Galesso阿尔维斯
17-3-28在6:38



我一直在寻找类型4,但我想知道是否可以在该表达式中添加另一个带有其他条件的类?提前致谢

–路易·滨田(Louay Hamada)
18年5月15日在17:48

对于类型三,类名和检查的顺序错误。它应该首先是类名称,例如[ngClass] =“ {'my-class1':1,'my-class2':2}”

–obaylis
18年7月18日在11:33

我想不止一次投票,每次我在这里结束时都提醒我如何做。 :)

– danbord
2月26日下午14:51

我有同样的问题@danbord :)

– MostafaMashayekhi
2月26日15:05

#2 楼

[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>
 






< pre class =“ lang-ts prettyprint-override”> <!-- reset/override all class names with a binding --> <div class="bad curly special" [class]="badCurly">Bad curly</div>


评论


从角度文档中:“星号是“语法糖”,用于表示更复杂的内容。在内部,Angular会将* ngIf属性转换为元素,包裹在宿主元素中,如下所示。* ngIf指令移动到元素,并在其中绑定属性[ngIf]。
的其余部分(包括其class属性)都移到了元素内部。” -更多信息@ angular.io/guide/structural-directives#the-asterisk--prefix

–组合
19年5月23日在8:56



实际上,这并不复杂,*仅允许简化的synax而不是规范的形式。

–GünterZöchbauer
19年6月28日在17:47

#3 楼

另一种解决方案是使用[class.active]

示例:

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


评论


我认为这应该是可以接受的答案,因为这是Angular2设置html类的方式(我不知道,而google将我带到这里)。

–kub1x
16年11月21日在14:07

#4 楼

这是ngClass的正常结构是:

[ngClass]="{'classname' : condition}"


因此,在您的情况下,只需像这样使用它即可。 >

#5 楼

通过以下示例,您可以使用'IF ELSE'

<p class="{{condition ? 'checkedClass' : 'uncheckedClass'}}">
<p [ngClass]="condition ? 'checkedClass' : 'uncheckedClass'">
<p [ngClass]="[condition ? 'checkedClass' : 'uncheckedClass']">


评论


我尝试了第一种和第二种解决方案。只有第二个为我工作

–user1238784
18年7月2日在7:03

#6 楼

您可以使用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};
    }


#7 楼

您应该使用类似这样的东西([ngClass]而不是*ngClass):

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




#8 楼

Angular 7.X中,根据表达式求值的类型,CSS类如下更新:


string-字符串(空格中列出的CSS类)分隔符)
Array-声明为Array元素的CSS类被添加
Object-键是在值中给出的表达式计算为真实值时添加的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>


#9 楼

扩展MostafaMashayekhi对选项2的回答>
还可以将多个选项与','链接,

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


也* ngIf可以用于某些这些情况通常与* ngFor

class="mats p" *ngIf="mat=='painted'"

结合使用

#10 楼

在创建反应形式时,我必须在按钮上分配两种类型的类。这是我的工作方式:

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


当表单有效时,按钮具有btn和btn类(来自引导程序),否则只有btn类。

#11 楼

此外,您还可以添加方法功能:

在HTML中

<div [ngClass]="setClasses()">...</div>


在component.ts

// Set Dynamic Classes
  setClasses() {
    let classes = {
      constantClass: true,
      'conditional-class': this.item.id === 1
    }

    return classes;
  }


#12 楼

让我们说,“您的条件”是您的条件或布尔属性,然后像这样

[class.yourClass]="YourCondition"


#13 楼

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>


#14 楼

这对我有用:

[ngClass]="{'active': dashboardComponent.selected_menu == 'profile'}"


#15 楼

您可以使用[ngClass]或[class.classname],两者的作用相同。 [class.my-class]="step==='step1'"


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

两者都可以工作!

#16 楼

[ngClass]指令无关,但我也得到与


相同的错误。无法读取未定义的属性'remove'在...上


并且我以为是[ngClass]条件中的错误,但事实证明我在[ngClass]条件下尝试访问的属性未初始化。

就像我的打字稿文件中有这个文件一样

element: {type: string};


,在我的[ngClass]中,我使用的是

[ngClass]="{'active', element.type === 'active'}"


,但出现错误

/>
无法读取...中未定义的属性“类型”。


,解决方案是将我的属性修复为/>
希望它对尝试匹配[ngClass]中的房产条件的人有所帮助

#17 楼

我们可以使用以下语法使类动态化。在Angular 2 plus中,您可以通过多种方式执行此操作:
[ngClass]="{'active': arrayData.length && arrayData[0]?.booleanProperty}"

[ngClass]="{'active': step}"

[ngClass]="step== 'step1'?'active':''"

[ngClass]="step? 'active' : ''"


#18 楼




 <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'}"


#19 楼

尝试这样。.

用''

<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>

定义您的课程