angular - 如何在 *ngFor 中添加依赖于数据的单个元素?
问题描述
我有一个应用程序,我在其中循环遍历一组 alertMessages。对于每个 alertMessage,我正在检查所有参数是否有效(alertmessage 未标记为已删除、已读取等)以及它是否已在今天创建。如果所有这些参数都无效,我不想显示警报消息。
但我也想显示一个包含单词“Today”的 h2 元素。但是,这个 h2 应该只显示一次,并且只有在呈现警报消息时才显示。
警报-page.component.html
<ng-container *ngFor="let alertMessage of alertMessages$ | async">
<ng-container *ngFor="let recipient of alertMessage.recipients">
<ng-container *ngIf="parametersAreValid(recipient) && wasCreatedToday(alertMessage)">
<alert [alertRecipient]="recipient [alertMessage]="alertMessage">
</alert>
</ng-container>
</ng-container>
</ng-container>
警报-page.component.ts
parametersAreValid(alertRecipient: AlertRecipient): boolean {
const isForCurrentUser = alertRecipient.recipientId === this.currentUser.id;
const isNotMarkedAsDeleted = !alertRecipient.isDeleted;
const isNotMarkedAsRead = !alertRecipient.isRead;
const isShownWhenShowDeletedIsSetToTrue = (alertRecipient.isDeleted && this.showDeleted);
const isShownWhenShowReadIsSetToTrue = (alertRecipient.isRead && this.showRead);
return (isForCurrentUser) && (isShownWhenShowDeletedIsSetToTrue || isNotMarkedAsDeleted) &&
(isNotMarkedAsRead || isShownWhenShowReadIsSetToTrue);
}
wasCreatedToday(alertMessage: AlertMessage): boolean {
const today = moment();
const alertSentAt = moment(alertMessage.sentAt);
return moment(alertSentAt).isSame(today, 'day');
}
解决方案
您可以使用 ngrx-utils 库的 ngLet 指令。https://github.com/ngrx-utils/ngrx-utils 使用此指令,您可以将 allertmessages 存储在模板中的局部变量中。然后,您可以检查 alertMessages.lenght > 0 并使用 *ngIf 指令显示 h2。
但是,我同意卡米尔的观点,即您不应该在模板中添加太多逻辑
推荐阅读
- apache-flink - 为什么我的 flink 程序没有加入两个流?
- python - 如果角度为负,玩家转向错误的方向
- django - 正确的 on_delete 选项
- azure-iot-edge - IotEdge 模块孪生更新已恢复
- ios - 使 TextField 将其内容包装在 SwiftUI 中
- utf-8 - 如何识别没有 BOM 的文件的文件格式(UTF8 No BOM 或 ANSI)?
- php - 如何防止在浏览器中按下后退/前进按钮时执行脚本?
- sql - 涉及 if 条件的 SQL Server 中的触发器
- javascript - 加速 NeDB 中的数组插入
- c - 将 scanf 与 %[^\n] 一起用于没有已知限制的字符串