使用求值表达式的ngClass会删除常见类

时间:2017-01-25 14:22:53

标签: angular

当我使用带有公共类的多个表达式的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的错误?

2 个答案:

答案 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。