Angular.js: $parent.$index verloren bei Verwendung von ng-if

Erstellt am 10. Sept. 2015  ·  3Kommentare  ·  Quelle: angular/angular.js

Mein HTML-Code

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

Javascript-Code im Controller

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

Dieser Code gibt mir die richtige Antwort

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

Aber wenn ich ng-if="true" in der Child-Schleife verwende, bekomme ich eine falsche Antwort

 <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

Das war falsch. Es ändert den übergeordneten Index in den untergeordneten Index

Bitte beheben Sie dieses Problem

Hilfreichster Kommentar

Dies ist in Angular kein Problem. Dies geschieht ( wie dokumentiert ), weil ngIf einen neuen Bereich erstellt, also bezieht sich $parent nicht auf den Bereich des äußeren ngRepeat .

Aus diesem Grund ist die Verwendung von $parent hier keine gute Methode. Sie könnten/sollten ngInit , um einen Alias ​​des übergeordneten Indexes wie

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

Demo

Alle 3 Kommentare

Dies ist in Angular kein Problem. Dies geschieht ( wie dokumentiert ), weil ngIf einen neuen Bereich erstellt, also bezieht sich $parent nicht auf den Bereich des äußeren ngRepeat .

Aus diesem Grund ist die Verwendung von $parent hier keine gute Methode. Sie könnten/sollten ngInit , um einen Alias ​​des übergeordneten Indexes wie

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

Demo

Übrigens, dies ist eine allgemeine Support-Frage. Solche Fragen sollten besser an die entsprechenden Kanäle gerichtet werden .
GitHub-Probleme sind Fehlerberichten und Funktionsanfragen vorbehalten.

Vielen Dank,

Ich kann das von ng-init verwenden

War diese Seite hilfreich?
0 / 5 - 0 Bewertungen