如何在 *ngFor 中添加依赖于数据的单个元素?
How to add a single element that depends on data inside *ngFor?
我有一个应用程序,我在其中循环遍历一组 alertMessages。对于每个 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。
但是,我同意 Kamil 的观点,你不应该在模板中加入太多逻辑
我有一个应用程序,我在其中循环遍历一组 alertMessages。对于每个 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。
但是,我同意 Kamil 的观点,你不应该在模板中加入太多逻辑