Angular.js: $parent.$index 在使用 ng-if 时丢失

创建于 2015-09-10  ·  3评论  ·  资料来源: angular/angular.js

我的 HTML 代码

 <div>
 <ul>
 <li ng-repeat='parentItem in arr1'>
 <div ng-repeat='childItem in arr2'>
 {{ $parent.$index }} , {{ $index }}
 </div>
 </li>
 </ul>
 </div>

控制器内的 Javascript 代码

 $scope.arr1 = [1,2];
 $scope.arr2 = [1,2];

这段代码给了我正确的答案

 0, 0
 0, 1
 1, 0,
 1, 1

但是如果我在子循环中使用ng-if="true"那么它会给我错误的答案

 <div>
 <ul>
 <li ng-repeat='parentItem in arr1'>
 <div ng-repeat='childItem in arr2' ng-if="true">
 {{ $parent.$index }} , {{ $index }}
 </div>
 </li>
 </ul>
 </div>
 0, 0
 1, 1
 0, 0
 1, 1

这是错误的。 它将父索引更改为子索引

请修复这个问题

最有用的评论

这在 Angular 中不是问题。 发生这种情况(如文档所述),因为ngIf创建了一个新的作用域,所以$parent不引用外部ngRepeat的作用域。

这就是为什么在这里使用$parent不是一个好习惯。 您可以/应该使用ngInit来创建父索引的别名,如下所示:

<li ng-repeat="parentItem in arr1" ng-init="parentIdx = $index">
  <div ng-repeat="childItem in arr2" ng-if="true">
    {{ parentIdx }} , {{ $index }}
  </div>
</li>

演示

所有3条评论

这在 Angular 中不是问题。 发生这种情况(如文档所述),因为ngIf创建了一个新的作用域,所以$parent不引用外部ngRepeat的作用域。

这就是为什么在这里使用$parent不是一个好习惯。 您可以/应该使用ngInit来创建父索引的别名,如下所示:

<li ng-repeat="parentItem in arr1" ng-init="parentIdx = $index">
  <div ng-repeat="childItem in arr2" ng-if="true">
    {{ parentIdx }} , {{ $index }}
  </div>
</li>

演示

顺便说一句,这是一个一般的支持问题。 此类问题最好向适当的渠道提出
GitHub 问题保留用于错误报告和功能请求。

谢谢,

我可以通过 ng-init 使用它

此页面是否有帮助?
0 / 5 - 0 等级