You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Angular中如何将*ngFor数据按特定布局分为两列展示

解决方案

你需要把列表拆分为左右两列,让左列第N项与右列第N项在同一行对齐,下面提供两种可行方案:

方案1:提前拆分数据(直观易维护)

先在组件逻辑里将原数组拆分为左右两组,再循环左组并匹配右组对应位置的元素:

组件TS代码

leftItems: any[] = [];
rightItems: any[] = [];

ngOnInit() {
  const mid = Math.ceil(this.items.length / 2);
  this.leftItems = this.items.slice(0, mid);
  this.rightItems = this.items.slice(mid);
}

HTML模板代码

<div class="w-full flex justify-center">
  <div class="grid grid-cols-2 gap-4 w-1/2">
    <div *ngFor="let item of leftItems; let i = index" class="flex items-center">
      <span>{{item.label}} - {{item.value}}</span>
      <span *ngIf="rightItems[i]" class="mx-2">|</span>
      <span *ngIf="rightItems[i]">{{rightItems[i].label}} - {{rightItems[i].value}}</span>
    </div>
  </div>
</div>

方案2:纯CSS Grid布局(无需修改数据)

利用Grid的grid-row属性直接控制元素位置,无需拆分原数组:

HTML模板代码

<div class="w-full flex justify-center">
  <div class="grid grid-cols-2 gap-4 w-1/2">
    <div *ngFor="let item of items; let i = index" 
         class="flex"
         [style.grid-row]="i < items.length/2 ? i+1 : i - Math.floor(items.length/2) +1">
      <span>{{item.label}} - {{item.value}}</span>
    </div>
  </div>
</div>

逻辑说明

以6个元素为例:

  • 前3个元素(索引0、1、2)的grid-row分别设为1、2、3,占据左列3行
  • 后3个元素(索引3、4、5)的grid-row计算为3-3+1=1、4-3+1=2、5-3+1=3,对应右列第1、2、3行
  • 若数组为奇数长度,最后一行仅显示左列元素,不会出现布局错乱

内容的提问来源于stack exchange,提问作者Victoria Erdődy

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.24 23:10:08