我有以下代码,并尝试在删除函数中使用$ index,但它给出的值不正确。
<li ng-repeat="joinMember in data.teamMember | orderBy:'member.screenName || member.fname' ">
<div class="member-list-img">
<a ng-href="">
<img ng-src="{{joinMember.member.data.image ? (joinMember.member.data.imageType == 'avatar' ? '/public/images/avatars/' + joinMember.member.data.image : '/public/images/' + joinMember.member.data.image) : '/public/images/avatars/avatar-73.png'}}" width="100%" alt="{{joinMember.member.screenName ? joinMember.member.screenName : joinMember.member.fname + ' ' + joinMember.member.lname }}" />
</a>
</div>
<div class="member-list-cont">
<h4>
<a ng-href="#">
{{joinMember.member.screenName ? joinMember.member.screenName : joinMember.member.fname + ' ' + joinMember.member.lname }}
</a>
</h4>
<span>{{joinMember.created | date : "MMMM d, y"}}</span>
</div>
<div ng-if="data.canModify" class="membr-delete">
<a ng-href="">
<i class="fa fa-trash text_link" aria-hidden="true" ng-click="deleteTeamMember($parent.$index, joinMember.id)"></i>
</a>
</div>
</li>
答案 0 :(得分:1)
那是因为指令ng-if为自己创建了一个新的作用域,当你引用$ parent时,它会访问直接$ parent的作用域,即内部重复表达式的作用域。
因此,如果你想在前者中实现你想要的东西,你可以使用它:
<div ng-repeat="i in list">
<div ng-repeat="j in list2">
<div ng-if="1">
({{$parent.$parent.$index}} {{$parent.$index}})
</div>
</div>
</div>
如果你有多个内部指令,你可以使用ng-init将$ index存储在一个变量中,用于子范围内的引用。
<div ng-repeat="i in list" ng-init="outerIndex=$index">
<div ng-repeat="j in list2" ng-init="innerIndex=$index">
<div ng-if="1">
({{outerIndex}} {{innerIndex}})
</div>
</div>
</div>
请在您的示例中尝试$ parent。$ parent。$ index,然后检查The error Pict
答案 1 :(得分:0)
正如您在angularjs的官方文档中所看到的,您应该通过ng-repeat内的$ index获得从零开始的索引。试试angularjs here的例子。尝试在控制器中调试data.teamMember
,以确保这是您想要迭代的正确数组。
答案 2 :(得分:0)
您在具有ng-if标记的div中使用$ parent。$ index。如果条件下降,则删除dom元素(div),以便您收到错误的$ index值。但是使用ng-show它只会向该div添加hide类。
所以尝试ng-show删除div元素是否重要,只需隐藏它。
注意: - 您还在ng-repeat中使用orderBy过滤器,它只对DOM进行排序,以便在控制器中找到不正确的对象值。