Angular.js: ng-ifを使用すると$ parent。$ indexが失われます

作成日 2015年09月10日  ·  3コメント  ·  ソース: angular/angular.js

私のHTMLコード

 <div>
 <ul>
 <li ng-repeat = 'arr1のparentItem'>
 <div ng-repeat = 'char2のchildItem'>
 {{$ 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 = 'arr1のparentItem'>
 <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 評価