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

AngularJS如何基于JSON嵌套对象的maxDay生成序号表头?

你之前的问题在于,ng-repeat直接遍历了dayMonth月份数组,所以生成的列数和月份数量一致,但你实际需要的是基于每个月份的天数,生成1到该天数的表头列。下面给你几种符合需求的实现方式,根据实际场景选择:

场景1:生成一行通用表头(覆盖所有月份的最大天数)

如果要做适配所有月份的日历表头(比如1-31天),可以先在控制器里计算出所有月份的最大天数,再生成对应的天数数组:

控制器代码

// 你的原始月份数据
$scope.dayMonth = [ 
  { "month": 1, "maxDay": 31 }, 
  { "month": 2, "maxDay": 28 }, 
  { "month": 3, "maxDay": 31 },
  // ... 其他月份数据
];

// 计算所有月份中的最大天数
const maxTotalDays = Math.max(...$scope.dayMonth.map(item => item.maxDay));
// 生成1到maxTotalDays的连续数字数组
$scope.daysHeader = Array.from({ length: maxTotalDays }, (_, idx) => idx + 1);

HTML代码

<tr>
  <th class="text-center nowrap" ng-repeat="day in daysHeader track by $index">
    {{ day }}
  </th>
</tr>

场景2:为每个月份单独生成一行天数表头

如果需要每个月份对应一行,每行的列数等于该月的天数,可以先给每个月份对象添加天数数组,再嵌套ng-repeat:

控制器代码

$scope.dayMonth = [ 
  { "month": 1, "maxDay": 31 }, 
  { "month": 2, "maxDay": 28 }, 
  // ... 其他月份数据
];

// 给每个月份生成1到maxDay的天数数组
$scope.dayMonth.forEach(monthItem => {
  monthItem.daysList = Array.from({ length: monthItem.maxDay }, (_, idx) => idx + 1);
});

HTML代码

<!-- 外层遍历月份,内层遍历该月的天数列 -->
<tr ng-repeat="month in dayMonth track by month.month">
  <th class="text-center nowrap" ng-repeat="day in month.daysList track by $index">
    {{ day }}
  </th>
</tr>

额外方案:用自定义过滤器简化(无需修改控制器)

如果不想在控制器里处理数组,可以定义一个AngularJS过滤器来动态生成天数范围:

过滤器代码

angular.module('yourAppName').filter('dayRange', function() {
  return function(totalDays) {
    const days = [];
    for (let i = 1; i <= totalDays; i++) {
      days.push(i);
    }
    return days;
  };
});

HTML代码(单个月份示例,比如取第一个月份)

<tr>
  <th class="text-center nowrap" ng-repeat="day in dayMonth[0].maxDay | dayRange track by $index">
    {{ day }}
  </th>
</tr>

HTML代码(每个月份一行)

<tr ng-repeat="month in dayMonth track by month.month">
  <th class="text-center nowrap" ng-repeat="day in month.maxDay | dayRange track by $index">
    {{ day }}
  </th>
</tr>

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.28 07:04:16