css Angular 7 -多个类(空格)导致ngClass失败

kcrjzv8t  于 2023-03-20  发布在  Angular
关注(0)|答案(3)|浏览(160)

许多前端框架通过在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的情况)?

cclgggtu

cclgggtu1#

更新,我检查和使用空格是好的。
所以这个

<div [ngClass]="{'btn btn-primary': booleanVar, 'btn btn-danger': !booleanVar}></div>

应该行得通。
您也可以使用此格式;
[ngClass]="booleanVar ? 'btn-primary': 'btn-danger'"

qlzsbp2j

qlzsbp2j2#

你一个班一个班地做:

[ngClass]="{'btn': true, 'btn-primary': booleanVar, 'btn-danger': !booleanVar}"
zbdgwd5y

zbdgwd5y3#

今天我在一个Angular 7项目上遇到了这个问题,经过一些修补,我发现了问题所在。通常可以使用ngClass添加多个空间分隔的类,但是如果同一个类出现在多个条件下,并且前面的条件之一为假,则会将其删除。

<span [ngClass]="{
    'fas fa-book': val === 1, 
    'fas fa-eye': val === 2, 
    'far fa-star': val === 3 }">
</span>

val === 3时没有问题,当val === 1时,fas类将被删除,而当val === 2时,fas类将被删除,然后再次添加回来,因此它工作正常。
我怀疑的是,它们只是按顺序执行,如果条件为真,则添加元素的类,但如果条件为假,则无论如何都将删除它们,我没有亲眼见过Angular 7代码,但我所有的测试都指向这一点。
假设val === 1,那么第一个Angular 将添加类fasfa-book,但是随后(因为val === 2false)将从span中移除类fasfa-eye
如果使用val === 2,则首先会计算val === 1的情况,并且会删除类fasfa-book,但随后会计算val === 2的情况,并重新添加fas类,因此它将正常工作
无论如何,在这一点上,当你在多个条件下拥有相同的类时,我发现的唯一解决方案是重新组织你的代码,以便在不同的条件下拥有共享的类,如下所示:

<span [ngClass]="{
    'fas': val === 1 || val === 2, //val !== 3 would've been fine too in this specific case
    'fa-book': val === 1, 
    'fa-eye': val === 2, 
    'far fa-star': val === 3 }">
</span>

下面的Plunkr展示了这个问题:https://plnkr.co/edit/EouOaIfBkIR5Q29n?open=lib%2Fapp.ts&deferRun=1(在app.ts内更改“瓦尔”值。1不适用于第一个跨度,而2和3适用于两种情况)

相关问题