在 angular 中使用 ngFor 时如何分配起始索引值
How to assign a starting index value while using ngFor in angular
我需要在 table 中始终显示至少 5 行(5 行或更多行)。例如,如果数据库中有 2 行可用,我需要在 UI 中显示另外 3 行空行。
这是我到目前为止尝试过的方法:
<div *ngFor="let task of tasks; let i = index">
<div class="rowDiv">{{task.id}}</div>
</div>
这里我想 运行 从 i = tasks.size 到 i < = 5 的循环。所以我在 UI 中总共有 5 行。如何实现?
<div *ngFor=" let i = index">
<div class="rowDiv"></div>
</div>
你不需要在html中保留这个逻辑。
在你 class 你可以做这样的事情:(假设你从服务器获取任务)
this.getTasks().subscribe((tasks) => {
const emptyTasks = Array(5).fill({id: 'empty'});
this.tasks = tasks.map((t, index) => t || emptyTasks[index]);
})
您可以遍历包含 5 个项目的数组,如果给定索引处不存在数据项目,则使用 *ngIf
显示额外的行:
<div *ngFor="let task of tasks">
<div class="rowDiv">{{task.id}}</div>
</div>
<ng-container *ngFor="let i of [0,1,2,3,4]">
<div *ngIf="!tasks[i]">
<div class="rowDiv">This row is empty</div>
</div>
</ng-container>
有关演示,请参阅 this stackblitz。
这可以在控制器中更好地处理。在默认更改检测策略的情况下,模板会在我们无法控制或不知情的情况下多次重新加载。所以最好确保 tasks
变量在控制器中至少有 5 个元素,而不是在模板中控制流。您可以在控制器中执行类似以下操作,并保持模板不变。
for (let i = 0; i < 5; i++) {
if(!this.tasks[i].id) {
this.tasks[i].id = '';
}
}
您还可以在
之后添加您需要的行数
<table>
<row *ngFor="let task in task">
</row>
<!--if task.length<5-->
<ng-container *ngIf="tasks.length<5">
<!-use slice:0:5-tasks.length-->
<row *ngFor="let i of [0,1,2,3,4] |slice:0:5-tasks.length">
</row>
</ng-container>
</table>
我需要在 table 中始终显示至少 5 行(5 行或更多行)。例如,如果数据库中有 2 行可用,我需要在 UI 中显示另外 3 行空行。
这是我到目前为止尝试过的方法:
<div *ngFor="let task of tasks; let i = index">
<div class="rowDiv">{{task.id}}</div>
</div>
这里我想 运行 从 i = tasks.size 到 i < = 5 的循环。所以我在 UI 中总共有 5 行。如何实现?
<div *ngFor=" let i = index">
<div class="rowDiv"></div>
</div>
你不需要在html中保留这个逻辑。 在你 class 你可以做这样的事情:(假设你从服务器获取任务)
this.getTasks().subscribe((tasks) => {
const emptyTasks = Array(5).fill({id: 'empty'});
this.tasks = tasks.map((t, index) => t || emptyTasks[index]);
})
您可以遍历包含 5 个项目的数组,如果给定索引处不存在数据项目,则使用 *ngIf
显示额外的行:
<div *ngFor="let task of tasks">
<div class="rowDiv">{{task.id}}</div>
</div>
<ng-container *ngFor="let i of [0,1,2,3,4]">
<div *ngIf="!tasks[i]">
<div class="rowDiv">This row is empty</div>
</div>
</ng-container>
有关演示,请参阅 this stackblitz。
这可以在控制器中更好地处理。在默认更改检测策略的情况下,模板会在我们无法控制或不知情的情况下多次重新加载。所以最好确保 tasks
变量在控制器中至少有 5 个元素,而不是在模板中控制流。您可以在控制器中执行类似以下操作,并保持模板不变。
for (let i = 0; i < 5; i++) {
if(!this.tasks[i].id) {
this.tasks[i].id = '';
}
}
您还可以在
之后添加您需要的行数 <table>
<row *ngFor="let task in task">
</row>
<!--if task.length<5-->
<ng-container *ngIf="tasks.length<5">
<!-use slice:0:5-tasks.length-->
<row *ngFor="let i of [0,1,2,3,4] |slice:0:5-tasks.length">
</row>
</ng-container>
</table>