angular - 在 Angular 6 的两个地方使用非常相似的 for 循环是不好的做法吗?
问题描述
我正在为 a 生成两个列表roster
。
一个列表显示当前成员that year
,第二个列表(如果有人去过excused in that year
)。
我注意到我有两个相同的 for 循环,除了一个打印出所有真正的布尔值,一个打印出错误。有没有更好的方法(或某种方法)来打印出这些人excused and not excused
?
<h2>Roster {{year-1}}-{{year}}</h2>
<div *ngFor="let k of peoples">
<div *ngFor="let a of k.people; let j = index">
<div *ngIf="k.year == year && k.people[j].excused == false">
{{k.people[j].firstName}} {{k.people[j].lastName}}
</div>
</div>
</div>
<h2>Excused</h2>
<div *ngFor="let k of peoples">
<div *ngFor="let a of k.people; let j = index">
<div *ngIf="k.year == year && k.people[j].excused == true">
{{k.people[j].firstName}} {{k.people[j].lastName}}
</div>
</div>
</div>
解决方案
最好以这种方式使用它而无需额外的 *ngIf。
正如评论中提到的,最好准备为组件中的数据分离数组并在数据更新后执行一次。但由于使用上下文未知,这看起来是一个更好的解决方案。如果您可以过滤数组中的数据以防止不必要的工作,则需要避免 *ngIf 模板中的另一个结构指令。它总是给你性能优势。
在您的组件中,您可以定义filter function
:
getExcused(isExcused: boolean) {
return this.peoples
.filter(k=>k.year === this.year)
.map(k=>k.people)
.filter(p=>p.excused === isExcused);
}
然后在模板中:
<h2>Roster {{year-1}}-{{year}}</h2>
<div *ngFor="let a of getExcused(false)">
{{ a.firstName }} {{ a.lastName }}
</div>
<h2>Excused</h2>
<div *ngFor="let k of getExcused(true)">
{{ k.firstName }} {{ k.lastName }}
</div>
如果您的组件在推送时使用更改检测策略,则不会产生任何性能问题。
推荐阅读
- r - 使用 sapply 函数对数据名称下的结果进行分组并在 R 中绘图
- python - 将颜色图固定为值
- excel - 在活动工作表中创建宏的 VBA 宏
- javascript - 如何在 react-forms 中处理两个不同的 onSubmit 函数?
- python - 在 BigQuery 中加载 avro 文件 - 默认值的类型为意外类型。预期为 null,但找到字符串:“null”
- node.js - 要求函数在方法内的函数内不起作用
- javascript - 附加特殊字符串时出现问题,将其替换为 Unicode 格式
- c# - 使用 Google Drive API v3 C# 将文件从共享的谷歌驱动器复制到我的谷歌驱动器
- javascript - 删除传单中的所有标记
- indexing - 在 total.js 中是否可以为变量赋值或保存/使用 HTML 中嵌套的 @{foreach...} 内联内的 @{foreach...} 的索引?