许多前端框架通过在CSS样式前面加上另一个类来封装CSS样式。
Eg Bootstrap :btn btn-primary
,其中btn
是前缀。
如果我有条件地将其应用于[ngClass]
,angular将中断:<div [ngClass]="{'btn btn-primary': booleanVar, 'btn btn-danger': !booleanVar}"></div>
然而,这可以通过如下提取公共命名类来容易地解决:<div class="btn" [ngClass]="{'btn-primary': booleanVar, 'btn-danger': !booleanVar}"></div>
瞧,我们的条件中不再有任何空间,Angular 也同意了。
现在有了一些上下文,让我们试着把它应用到Font Awesome
的方法中,它们的前缀可以找到here。
Style Prefix Example
Solid fas <i class="fas fa-igloo"></i>
Regular far <i class="far fa-igloo"></i>
Light fal <i class="fal fa-igloo"></i>
Brands fab <i class="fab fa-font-awesome"></i>
第1个问题:是否可以在条件查询中使用空格?* 如何使用 *?
第2个问题:(如果第一个问题不可能回答)我如何解决前缀不再是静态的情况(如Font Awesome的情况)?
3条答案
按热度按时间cclgggtu1#
更新,我检查和使用空格是好的。
所以这个
应该行得通。
您也可以使用此格式;
[ngClass]="booleanVar ? 'btn-primary': 'btn-danger'"
qlzsbp2j2#
你一个班一个班地做:
zbdgwd5y3#
今天我在一个Angular 7项目上遇到了这个问题,经过一些修补,我发现了问题所在。通常可以使用ngClass添加多个空间分隔的类,但是如果同一个类出现在多个条件下,并且前面的条件之一为假,则会将其删除。
当
val === 3
时没有问题,当val === 1
时,fas
类将被删除,而当val === 2
时,fas
类将被删除,然后再次添加回来,因此它工作正常。我怀疑的是,它们只是按顺序执行,如果条件为真,则添加元素的类,但如果条件为假,则无论如何都将删除它们,我没有亲眼见过Angular 7代码,但我所有的测试都指向这一点。
假设
val === 1
,那么第一个Angular 将添加类fas
和fa-book
,但是随后(因为val === 2
是false
)将从span
中移除类fas
和fa-eye
。如果使用
val === 2
,则首先会计算val === 1
的情况,并且会删除类fas
和fa-book
,但随后会计算val === 2
的情况,并重新添加fas
类,因此它将正常工作无论如何,在这一点上,当你在多个条件下拥有相同的类时,我发现的唯一解决方案是重新组织你的代码,以便在不同的条件下拥有共享的类,如下所示:
下面的Plunkr展示了这个问题:https://plnkr.co/edit/EouOaIfBkIR5Q29n?open=lib%2Fapp.ts&deferRun=1(在app.ts内更改“瓦尔”值。1不适用于第一个跨度,而2和3适用于两种情况)