You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Angular中如何根据布尔值切换已付/未付状态的图标样式

问题描述

现有Angular表格代码如下:

<tr *ngFor="let invoice of invoices; let i = index">
    <td>{{ i + 1 }}</td>
    <td>{{ invoice.number }}</td>
    <td>{{ invoice.client.name }}</td>
    <td>{{ invoice.paid }}</td>
</tr>

其中invoice.paid为布尔值,需实现:

  • 当invoice.paid为true(已付)时,显示带绿色样式的图标,对应类名:pe-7s-close-check pe-lg pe-va text-success
  • 当invoice.paid为false(未付)时,显示带红色样式的图标,对应类名:pe-7s-close-circle pe-lg pe-va text-danger
解决方案

可以通过Angular的属性绑定或ngClass指令实现需求,以下是两种常用方式:

方式一:使用ngClass对象语法

通过对象语法根据布尔值动态匹配类名,可读性更强:

<tr *ngFor="let invoice of invoices; let i = index">
    <td>{{ i + 1 }}</td>
    <td>{{ invoice.number }}</td>
    <td>{{ invoice.client.name }}</td>
    <td>
        <i [ngClass]="{
            'pe-7s-close-check pe-lg pe-va text-success': invoice.paid,
            'pe-7s-close-circle pe-lg pe-va text-danger': !invoice.paid
        }"></i>
    </td>
</tr>

方式二:使用三元表达式绑定class属性

逻辑简单时,用三元表达式直接绑定class属性更简洁:

<tr *ngFor="let invoice of invoices; let i = index">
    <td>{{ i + 1 }}</td>
    <td>{{ invoice.number }}</td>
    <td>{{ invoice.client.name }}</td>
    <td>
        <i [class]="invoice.paid 
            ? 'pe-7s-close-check pe-lg pe-va text-success' 
            : 'pe-7s-close-circle pe-lg pe-va text-danger'"></i>
    </td>
</tr>

说明

两种方式均替换了原代码中直接显示{{invoice.paid}}的文本逻辑,改用<i>标签(适配Pe-icon类的常规渲染方式)动态渲染对应样式的图标,满足已付/未付的视觉区分需求。

内容的提问来源于stack exchange,提问作者Future Hacker

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.14 20:32:11