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时它没有正确显示的唯一原因。是的,但在我的特定情况下,我不想创建过滤项。这里的重点是没有简单的方法来处理全球计数器???正如我所说的,我相信你试图在观点上过于聪明,你的观点应该简单。您可以在视图中使用表达式进行赋值,但由于表达式多次求值,因此结果是行列式。