2017-07-03 54 views
0

我想在特定条件下使用ngclass设置类。ngclass条件在角度2与多类

我尝试:

[ngClass]="{'warnColor gray1':alerts[0].error==0,'warnColor red':alerts[0].error!=0}" 

但奇怪当左条件是仅应用灰色印刷成的跨度。

这样的跨度是这样

<span class="gray1" ng-reflect-ng-class="[object Object]"></span> 

我知道我可以使用别的condtion(?:)但什么是错这个语法?

+0

关于语法,它是正确的。你还可以描述警报的样子吗? – trungk18

+0

你尝试过[ngClass] =“{'warnColor gray1':alerts [0] .error == 0,'warnColor':alerts [0] .error!= 0,'red':alerts [0] .error != 0}“' –

回答

1

当您使用[ngClass]="{'warnColor gray1': alerts[0].error == 0, 'warnColor red': alerts[0].error != 0}"ngClass指令被称为格式化驼峰到别的东西。这里是source code供参考。

private _toggleClass(klass: string, enabled: any): void { 
    klass = klass.trim(); 
    if (klass) { 
     klass.split(/\s+/g).forEach(klass => { this._renderer.setElementClass(this._ngEl.nativeElement, klass, !!enabled); }); 
    } 
} 

该指令的_toggleClass方法实际上移除并设置元件上的类。在你的情况下,它被称为两次。

首播时间: klasswarnColor gray1enabledtrue作为条件为真

这将设置你的元素上两节课,如果_toggleClass方法设置一个断点,你可以看到,其实两者warnColorgray1类应用于元素。

二时间: klasswarnColor redenabledfalse的条件计算为false

这从你的元素去掉两个类,即warnColorred,现在warnColor类是在第一步骤中应用,但现在它已经在最后你将被删除,只有类gray1

所以不是我推荐这个语法通用类:

<div class="warnColor" [ngClass]="{'gray1': alerts[0].error == 0, 'red': alerts[0].error != 0}"> 
    Some html 
</div> 
1

你可以得到它与三元运营商合作

<span [ngClass]="alerts[0].error == 0 ? 'warnColor gray1' : 'warnColor red'"></span> 

我不知道为什么你的语法不工作,这似乎是正确的。角似乎在后面做什么,也许他们尝试,因为改变warnColorwarn-color让你的语法工作

[ngClass]="{'warn-color gray1':alerts[0].error==0,'warn-color red':alerts[0].error!=0}"