Angular2 使用 *ngif 在 html 代码中设置类名

Posted

技术标签:

【中文标题】Angular2 使用 *ngif 在 html 代码中设置类名【英文标题】:Angular2 use *ngif to set class name in html code 【发布时间】:2018-10-01 15:21:57 【问题描述】:

我尝试了一些东西,因为我正在构建一个天气仪表板。

我使用 http 加载天气数据并订阅,所以我会得到一个可观察的返回,我不能像 typescript 中的数组那样通过槽来添加新属性。

例如,我想查看每个天气数据并查看某个值是否超过 70°F,并告诉天气数据项添加一个新属性“weatherdata-sun-hot”。否则它应该使用另一个类名“weatherdata-sun-normal”,我会使用它作为类名,稍后通过插值将其放入 html 中。

所以我的想法是用html模板来解决这个问题

到目前为止,我的代码在这里

<ul>
   <li *ngFor="let item of weatherdata">item.dt_txt | item.main.temp_min -> item.main.temp_max</li>
</ul>

有没有优雅的方法来解决这个问题?

感谢您的帮助。

【问题讨论】:

你需要条件类,看这个***.com/questions/35269179/… @AliAdravi:感谢您的提示,但我看不到那里的 if/else 机制。就像如果 val 大于使用类名 x 其他类名 y 一样。你能给我一个简单的例子吗? :-) 再次感谢。 @AliAdravi:我想出了一个我尝试过的可行解决方案:&lt;li *ngFor="let item of weatherdata" [ngClass]="[item.main.temp_max &gt; 17 ? 'weather-sun-hot' : 'weather-sun-normal']" &gt;item.dt_txt | item.main.temp_min -&gt; item.main.temp_max&lt;/li&gt; 但对我来说,它看起来像丑陋的代码。或者你会以同样的方式实现它吗?我很困惑。 【参考方案1】:

你需要使用 ngClass 指令:

<ul>
    <li *ngFor="let item of weatherdata" [ngClass]="'weatherdata-sun-hot': item.main.temp_min > 70, 'weatherdata-sun-normal': item.main.temp_min <= 70">
        item.dt_txt | item.main.temp_min -> item.main.temp_max
    </li>
</ul>

或者你可以在组件的代码中做它并绑定它:

模板

<ul>
    <li *ngFor="let item of weatherdata" [ngClass]="tempClass(item)">
        item.dt_txt | item.main.temp_min -> item.main.temp_max
    </li>
</ul>

组件

@Component(...)
class MyComponent 
    tempClass(item): any 
        const hot = item.main.temp_min > 70;
        return 
            'weatherdata-sun-hot': hot,
            'weatherdata-sun-normal': !hot
        ;
    

【讨论】:

感谢您的观点...我应该想到的 :-) 如此简单和好。祝你有美好的一天。

以上是关于Angular2 使用 *ngif 在 html 代码中设置类名的主要内容,如果未能解决你的问题,请参考以下文章

Angular2 内置指令 NgFor 和 NgIf 详解

Angular2 动画不适用于 ngIf

无法读取未定义 angular2 ngif 的属性

Angular2:条件显示,绑定到 [hidden] 属性与 *ngIf 指令 [重复]

ngIf 未定义的 HTML 检查变量不包括值为 0 时的情况

当模板中有ngIf时如何识别Angular2组件是不是已完全加载(包括ViewChilds)