Angularjs 如何手动设置ng repeat生成的元素索引?

Angularjs 如何手动设置ng repeat生成的元素索引?,angularjs,Angularjs,我有两次这样的重复 <div ng-repeat="i in items1" ng-if="i.name == 'abc'"> <input name="iName[{{$index}}].ele" value="" /> </div> <div ng-repeat="i in items2" ng-if="i.name == 'abc'"> <input name="iName[{{$index}}].ele" value=

我有两次这样的重复

<div ng-repeat="i in items1" ng-if="i.name == 'abc'">
    <input name="iName[{{$index}}].ele" value="" />
</div>
<div ng-repeat="i in items2" ng-if="i.name == 'abc'">
    <input name="iName[{{$index}}].ele" value="" />
</div>
<input name="iName[1].ele" value="" />
<input name="iName[3].ele" value="" />
<input name="iName[1].ele" value="" />

它是这样产生输出的

<div ng-repeat="i in items1" ng-if="i.name == 'abc'">
    <input name="iName[{{$index}}].ele" value="" />
</div>
<div ng-repeat="i in items2" ng-if="i.name == 'abc'">
    <input name="iName[{{$index}}].ele" value="" />
</div>
<input name="iName[1].ele" value="" />
<input name="iName[3].ele" value="" />
<input name="iName[1].ele" value="" />

如何修复上述代码,使输出如下所示,请参见索引

<input name="iName[0].ele" value="" />
<input name="iName[1].ele" value="" />
<input name="iName[2].ele" value="" />

您试图在视图中表现得太聪明。更好的方法是添加一些控制器代码,将过滤项拉入数组,然后输出该数组。看到这个了吗

差不多

 angular.forEach($scope.items1,function(item){
      if(item.name=='abc') $scope.filtereditems.push(item);
    });
    angular.forEach($scope.items2,function(item){
      if(item.name=='abc') $scope.filtereditems.push(item);
    });

现在,您可以绑定到
filteredItems

ng if在循环的每次迭代中都会重新计算,这样您的代码就会隐藏i.name!='abc’。如果要在每次迭代中显示$index值,则需要将ng repeat和ng If放在单独的标记中,如下所示:

  <div ng-repeat="i in items1">
    $index = {{$index}}
    <input ng-if="i.name == 'abc'" name="iName[{{$index}}].ele" value="{{$index}}" />
  </div>

$index={{$index}

请参阅plunker:

items1和items2数组的内容是什么?内容类似[{name:'abc',type:'zy'}…]可能是ng if阻止某些输入显示,如果删除ng if,索引是否正确?是的,如果删除ng if索引是否正确。是否确定items1[0]。name和items1[2]。name是'abc'?这是我能想到的添加ng-if时它没有正确显示的唯一原因。是的,但在我的特定情况下,我不想创建过滤项。这里的重点是没有简单的方法来处理全球计数器???正如我所说的,我相信你试图在观点上过于聪明,你的观点应该简单。您可以在视图中使用表达式进行赋值,但由于表达式多次求值,因此结果是行列式。