Angularjs 如果导致$parent.$index设置为$index,则为ng

Angularjs 如果导致$parent.$index设置为$index,则为ng,angularjs,angularjs-scope,angularjs-ng-repeat,Angularjs,Angularjs Scope,Angularjs Ng Repeat,我有一个ng中继器,其中包含一个嵌套的ng中继器。在嵌套中继器中,我试图跟踪父项$index值,这很好。但是,当我在引用$parent.$index的同一元素中引入ng if时,parents索引被设置为子索引。有什么想法吗?代码正在运行。例如,我单击父级0的索引1,并将索引1父级1作为索引 JavaScript var myApp = angular.module('myApp', []); myApp.controller('ctrl', function($scope) { $sc

我有一个ng中继器,其中包含一个嵌套的ng中继器。在嵌套中继器中,我试图跟踪父项$index值,这很好。但是,当我在引用$parent.$index的同一元素中引入ng if时,parents索引被设置为子索引。有什么想法吗?代码正在运行。例如,我单击父级0的索引1,并将索引1父级1作为索引

JavaScript

var myApp = angular.module('myApp', []);

myApp.controller('ctrl', function($scope) {

  $scope.arr = [["a","b","c"],["d","f","e"],["f","h","i"]];

  $scope.logIndex = function(index, parent) {
    console.log("index: " + index + ", parent: " + parent);
  };

});
HTML

<ul>
  <li ng-repeat="i in arr">
    <ul>
      <li ng-repeat="j in i">
         <span ng-click="logIndex($index, $parent.$index)" ng-if="$index > 0">{{ j }}</span>
      </li>
    </ul>
  </li>
</ul>
    • {{j}

这是因为
ng if
在元素上创建了子作用域,因此
$parent
实际上是其立即ng repeat的子作用域,而不是父作用域,并且$index也是从其直接父级继承的相同$index(即第二个ng repeat的子作用域)。您可以使用别名ng repeat的特殊属性,并使用该属性而不是使用$parent

   <li ng-repeat="i in arr" ng-init="parentIndex=$index">
    <ul>
      <li ng-repeat="j in i">
         <span ng-click="logIndex($index, parentIndex)" ng-if="$index > 0">{{ j }} </span>
      </li>
    </ul>
   </li>
    • {{j}