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

AngularJS中如何用ng-repeat将多组动态列表按列渲染为表格

实现方案

完全可以通过ng-repeat实现,不需要转换原有数据结构,调整遍历逻辑即可。

核心思路

HTML表格本身是按行组织的,我们只需要按索引遍历其中一列的长度,每一行分别取三个数组对应索引的内容即可,不需要修改原有的三个独立列表的结构。

你之前的代码问题在于:遍历的是外层tableau数组的3个对象,只会生成3行,且每个item只有一个属性(要么是ws要么是days要么是tnq),所以会出现取值为空、所有值挤在一起的问题。


完整代码示例

<table cellpadding="20" rules="GROUPS" frame="BOX">
  <thead>
    <tr>
      <th>&nbsp;</th>
      <!-- 动态遍历dayslist生成表头 -->
      <th 
        ng-repeat="day in ctrl.tableau[1].days track by $index" 
        class="xl154" 
        style="width: 100px"
      >
        {{day}}
      </th>
    </tr>
  </thead>
  <tbody>
    <!-- 按索引遍历wslist的长度生成行,track by $index优化高频刷新性能 -->
    <tr ng-repeat="item in ctrl.tableau[0].ws track by $index">
      <!-- 第一列取wslist对应索引的元素 -->
      <td class="xl153">{{ctrl.tableau[0].ws[$index]}}</td>
      <!-- 第二列取tnqlist对应索引的元素 -->
      <td class="xl153">{{ctrl.tableau[2].tnq[$index]}}</td>
    </tr>
  </tbody>
</table>

优化建议

如果觉得模板里直接写数组索引不够清晰,可以在控制器中提前把三个列表暴露为独立变量:

// 控制器代码
ctrl.wslist = ctrl.tableau[0].ws
ctrl.dayslist = ctrl.tableau[1].days
ctrl.tnqlist = ctrl.tableau[2].tnq

修改后模板代码更易维护:

<!-- 表头部分 -->
<th ng-repeat="day in ctrl.dayslist track by $index" class="xl154" style="width: 100px">{{day}}</th>
<!-- 行遍历 -->
<tr ng-repeat="item in ctrl.wslist track by $index">
  <td class="xl153">{{ctrl.wslist[$index]}}</td>
  <td class="xl153">{{ctrl.tnqlist[$index]}}</td>
</tr>

注意事项

  • 请确保wslist、dayslist、tnqlist三个数组长度一致,若长度不同可以对应补空值避免数据错位
  • track by $index必须保留,高频刷新场景下可以避免AngularJS重绘整个DOM列表,大幅提升渲染性能

内容的提问来源于stack exchange,提问作者Yona

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.06 12:39:04