当我使用带有公共类的多个表达式的ngClass时,当表达式从false变为true时,公共类c1
被删除:
<span [ngClass]="{'c1 c2' : showTwo, 'c1 c3' : showThree, 'c1 c4' : showFour}" ></span>
为了解决这个问题,我必须使用标准class
属性指定公共类。
<span class="c1" [ngClass]="{'c2' : showTwo, 'c3' : showThree, 'c4' : showFour}" ></span>
有没有更好的方法来实现这一目标?或者它是Angular2的错误?
答案 0 :(得分:9)
不支持。
https://github.com/angular/angular/issues/5763#issuecomment-163710342
所以我们有点说“我想要同时没有
foo
课”,这显然没有意义。这是一个类添加/删除的顺序,将导致不同的结果 - 这不是确定性的。我想您需要将代码更改为:
[ng-class]="{'active has-error': isOn, 'disabled has-success': isDisabled, 'has-feedback': isOn || isDisabled}"
。
进一步讨论github讨论
[ng-class]="{'active has-error has-feedback': isOn, 'disabled has-success has-feedback': isDisabled}"
可以细分为:1.1:如果isOn的计算结果为true,则添加active,has-error和has-feedback。
1.2:如果isOn的计算结果为false,则删除class active,has-error和has-feedback。
2.1:如果isDisabled的计算结果为true,则添加禁用的类,has-success和has-feedback。
2.2:如果isDisabled的计算结果为false,则删除禁用的类,has-success和has-feedback。
没有办法跟踪类如何被添加到元素的classList或添加它们的人,并且这不是ng-class的目的。它只是应用它所知道的规则。
答案 1 :(得分:0)
为什么要两次动态应用/删除课程?如果始终需要课程c1
,请将其添加到class="c1"
属性中,并使用[ngClass]
表示任何条件内容。不是bug,它是构建块html和css。