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

Angular项目数组长度显示异常 *ngFor循环生成重复卡片如何解决

你当前的代码将*ngFor指令绑定在了卡片外层div上,该指令的作用是遍历数组,每遍历到一个元素就渲染一次绑定的宿主元素,所以数组有多少个元素就会生成多少张卡片。

方案适配场景说明

你当前的卡片是人寿与健康类保单的总览卡片,仅需展示总数量,且同类型保单的LobDsc字段值一致,直接调整HTML模板即可:

<!-- 移除card容器上的*ngFor指令,加ngIf判断数组非空时才渲染卡片 -->
<div class="card" *ngIf="filterLifePolicies?.length">
    <!-- 路由参数直接取数组第一个元素的LobDsc,加可选链避免数组为空时报错 -->
    <a [routerLink]= "['/contracts', filterLifePolicies[0]?.LobDsc]"
      routerLinkActive="active" class="noLinksDecoration">
    <div class="card-body text-center">
      <img src="../../assets/images/Component62_1.svg"> 
      <p class="policyTitle">Ζωή & Υγεία</p>
      <!-- countLife已经在TS中赋值为数组长度,可直接使用 -->
      <p class="counter">{{countLife}}</p>
    </div>
    </a>
</div>

兼容低版本Angular的写法

如果你使用的Angular版本低于12,不支持可选链语法,可替换为显式判空逻辑:

<div class="card" *ngIf="filterLifePolicies.length > 0">
    <a [routerLink]= "['/contracts', filterLifePolicies[0].LobDsc]"
      routerLinkActive="active" class="noLinksDecoration">
    <!-- 卡片内部内容保持不变 -->
    </a>
</div>

特殊场景补充(可选)

如果跳转时需要传递该类型下所有保单的LobDsc,可将参数改为逗号拼接的字符串,路由接收时再拆分即可:

<a [routerLink]= "['/contracts', filterLifePolicies.map(item => item.LobDsc).join(',')]"

TS代码无需调整

你已经在接口返回逻辑中正确计算了countLife = this.filterLifePolicies.length,该部分逻辑可以直接保留。

内容的提问来源于stack exchange,提问作者Andreas V

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.30 13:09:00