网站搜索

angular - 在使用 ngFor 进行迭代时同时设置类和数据


我有一个表格,每一行都是使用 ngFor 创建的

 <tbody>
    <tr *ngFor="let item of Details">
        <div class="row details-row row-cols-lg-2 row-cols-1" *ngIf="closureDetails">
            <div class="col" [ngClass]="{'d-none':getMilestones(item.ProjectCode)?.length===0}">
                <app-milestone [milestones]="getMilestones(item.ProjectCode)"></app-milestone>
            </div>
            <div class="col" [ngClass]="{'d-none':getRisks(item.ProjectCode)?.length===0}">
                <app-risk [risks]="getRisks(item.ProjectCode)"></app-risk>
            </div>
        </div>
    </tr>
</tbody>

如你所见,我正在使用相同的函数为 col 设置类,以便将数据传递给子组件。但我担心的是,该函数会触发两次,而第一次触发只是为了切换 DIV.COL 的可见性。

当有300多行数据时,同一个函数会消耗600次请求,这导致处理过程中出现一些延迟。

所以请建议一种优化这个需求的好方法

答案#1

就像 @ricky 说的,你永远不应该在模板表达式中使用函数调用

解决方案:(选择里程碑事件作为示例)

在组件中引入变量,并在模板中使用它来替换函数绑定:

`hasMileStones` for `getMilestones(item.ProjectCode)?.length===0}`

`projectCodeToMileStonesMap[item.ProjectCode]` for `getMilestones(item.ProjectCode)`

模板:

<div class="col" [ngClass]="{'d-none':!hasMileStones}">
    <app-milestone [milestones]="projectCodeToMileStonesMap[item.ProjectCode]"></app-milestone>
</div>