$ index跟踪由ng-if隐藏的元素

时间:2017-01-14 11:58:43

标签: javascript angularjs indexing angularjs-ng-repeat angular-ng-if

<tr ng-repeat="materialOffer in Vm.materialoffers track by materialOffer.id" 
    ng-if="!materialOffer.containMaterial && $index >= startIndex && $index < endIndex">
</tr>

我有一个名为materialoffers的对象数组。数组的每个元素都是一个具有名为containMaterial的属性的对象。某些对象具有此属性null,而其他对象将其作为对象。我想只显示那些在containMaterial属性中有对象的对象。我还使用$indexstartIndexendIndex进行分页。我遇到的问题是$index正在跟踪那些具有containMaterial属性null的对象,例如数组就像这样

[{ 
  "object1": {
    containMaterial:obejct;
  }
}, {
  "object2": {
    containMaterial:obejct;
  }
}, {
  "object3": {
    containMaterial:Null;
  }
}, {
  "object4": {
    containMaterial:obejct;
  }
}]

当遍历object4时,$index将是3,而它应该是2,因为对象已被ng-if隐藏。

1 个答案:

答案 0 :(得分:1)

为什么不预先过滤?

在您的HTML中:

<tr ng-repeat="materialOffer in Vm.filteredMaterialOffers() track by materialOffer.id"
    ng-if="$index >= startIndex && $index < endIndex">
</tr>

在你的JS中:

$scope.Vm.filteredMaterialOffers = function () {
    Vm.materialoffers.filter(function (x) {
        return x.containMaterial ;
    });
};