Angular:带* ngClass的条件类

2020/09/23 12:41 · javascript ·  · 0评论

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

Angular版本2,...,9提供了几种有条件地添加类的方法:

第一类

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

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

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

范例:

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

正常的结构ngClass是:

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

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

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

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

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

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

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>

扩展MostafaMashayekhi他对选项2的答案>您还可以将多个选项与','

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

* ngIf也可以在某些情况下通常与* ngFor结合使用

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

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

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

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

让我们说,YourCondition是您的条件或布尔型属性,则可以这样

[class.yourClass]="YourCondition"

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

在HTML中

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

在component.ts中

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

    return classes;
  }

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>

这对我有用:

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

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


   要么

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

两者将一样工作!

我们可以使用以下语法使类动态化。在Angular 2 plus中,您可以通过多种方式执行此操作:

[ngClass]="{'active': arrayData.length && arrayData[0]?.booleanProperty}"
[ngClass]="{'active': step}"
[ngClass]="step== 'step1'?'active':''"
[ngClass]="step? 'active' : ''"

[ngClass]指令无关,但我也收到与相同的错误

无法读取未定义的属性“删除” ...

并且我以为是我的[ngClass]情况下的错误,但结果是我在[ngClass]未初始化的情况下尝试访问的属性

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

element: {type: string};

在我[ngClass]我正在使用

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

而我得到了错误

无法读取未定义的属性“类型” ...

解决方案是将我的财产固定为

element: {type: string} = {type: 'active'};

希望它对尝试匹配房产条件的人有所帮助 [ngClass]

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

像这样尝试

用''定义班级

<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>
本文地址:http://javascript.askforanswer.com/angulardai-ngclassdetiaojianlei.html
文章标签: ,   ,   ,   ,  
版权声明:本文为原创文章,版权归 javascript 所有,欢迎分享本文,转载请保留出处!

文件下载

老薛主机终身7折优惠码boke112

上一篇:
下一篇:

评论已关闭!