为父ng-repeat循环获取不正确的$ index值

时间:2018-03-16 08:03:39

标签: angularjs

我有以下代码,并尝试在删除函数中使用$ 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> 

3 个答案:

答案 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进行排序,以便在控制器中找到不正确的对象值。