Javascript AngularJS-ng重复以在两次使用切片时数据不可用时显示空单元格

Javascript AngularJS-ng重复以在两次使用切片时数据不可用时显示空单元格,javascript,angularjs,angularjs-directive,angularjs-scope,angularjs-ng-repeat,Javascript,Angularjs,Angularjs Directive,Angularjs Scope,Angularjs Ng Repeat,我有一个简单的ng repeat,它循环遍历一个JSON文件,其中包含一个国家列表和该国的详细信息,例如特定月份(本例中为24个月)的货币、人口 My ng repeat成功地循环了前12个月,并在满足ng开关标准时显示相应的文本 此外,对于前12个月,如果没有可用数据,则单元格中会显示“空” 但是,由于我正在使用2个ng重复和slice,我似乎无法让我的getEmptyCells函数在12个月以上的时间内工作/显示为空 HTML: {{country.countryName} 中等 大的 更

我有一个简单的ng repeat,它循环遍历一个JSON文件,其中包含一个国家列表和该国的详细信息,例如特定月份(本例中为24个月)的货币、人口

My ng repeat成功地循环了前12个月,并在满足ng开关标准时显示相应的文本

此外,对于前12个月,如果没有可用数据,则单元格中会显示“空”

但是,由于我正在使用2个
ng重复
slice
,我似乎无法让我的
getEmptyCells
函数在12个月以上的时间内工作/显示为空

HTML:


{{country.countryName}
中等
大的
更大的
很大的
错误
空的
{{country.countryName}
中等
大的
更大的
很大的
错误
空的
js:

function EventController($scope) {
$scope.Countries = [
  {
      countryName:"USA",
      Details:[11,22,33,44,55,66,77,88,99,00,01,02,11,22]
  },
  {
      countryName:"UK",
      Details:[33,44,55,66]
  },
  {
      countryName:"Russia",
      Details:[77,88,99,00]
  }
];
$scope.getEmptyCells = function(len){
    var emptyCells = [];
    for(var i = 0; i < 12 - len; i++){
        emptyCells.push(i);
    }        
    return emptyCells;
}
}
函数EventController($scope){
$scope.Countries=[
{
国名:“美国”,
详情:[11,22,33,44,55,66,77,88,99,00,01,02,11,22]
},
{
国名:“英国”,
详情:[33,44,55,66]
},
{
国名:“俄罗斯”,
详情:[77,88,99,00]
}
];
$scope.getEmptyCells=函数(len){
var emptyCells=[];
对于(变量i=0;i<12-len;i++){
清空细胞。推(i);
}        
返回空细胞;
}
}
我的小提琴:

更新的fiddle:尝试使用2个函数


更新的小提琴:在getEmptyCells2中传递切片

这里有两个问题

首先,在大于12个月的时间里,您没有将正确的数字传递给该方法。第一个参数是begin索引。在您使用的前十二个月内,您使用了country.Details.slice(0,12),这意味着从索引
0开始,到索引
12结束,索引
12定义为

结束提取的从零开始的索引。切片提取至但不包括末端

因此,您在前12个月使用索引0-11(总共12个元素)。为了显示接下来的12个月,您需要从索引12开始,而不是从13开始

ng-repeat="countryDetails in country.Details.slice(12, 24)"
现在,您的第二个问题是,您没有为第二个表获得正确数量的“空”单元格。原因是你没有考虑到你正在看的是未来12个月,而不是前12个月。解决此问题的最简单方法是,在显示未来12个月时,从使用的长度参数中减去12

<td ng-repeat="emptyCell in getEmptyCells(country.Details.length-12)" class="empty">
        empty
</td> 

这里有一个更新的提琴:

感谢您花时间解释上述内容,现在就有意义了。我已将ng repeat emptyCell调用修改为:。。。然后。。。。。你写的东西很管用,我唯一不太喜欢的是你如何做两次切片——一次在ng重复中显示“数据”,一次在ng重复中显示空单元格。如果您创建一个封装html结构创建逻辑的指令,那么您只需传递切片数组,而不必执行切片2次。
<td ng-repeat="emptyCell in getEmptyCells(country.Details.length-12)" class="empty">
        empty
</td> 
$scope.getEmptyCells = function(len){
    var emptyCells = [];
    if (len<0) { len = 0; }
    for(var i = 0; i < 12 - len; i++){
        emptyCells.push(i);
    }        
    return emptyCells;
}