Angular.js: $parent.$index hilang saat menggunakan ng-if

Dibuat pada 10 Sep 2015  ·  3Komentar  ·  Sumber: angular/angular.js

Kode HTML saya

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

Kode Javascript di dalam pengontrol

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

Kode ini memberi saya jawaban yang benar

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

Tetapi jika saya menggunakan ng-if="true" di loop anak maka itu memberi saya jawaban yang salah

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

Ini salah. Itu mengubah indeks induk menjadi indeks anak

Tolong perbaiki masalah ini

Komentar yang paling membantu

Ini bukan masalah di Angular. Ini terjadi ( seperti yang didokumentasikan ), karena ngIf membuat lingkup baru, jadi $parent tidak merujuk ke lingkup luar ngRepeat .

Itulah mengapa menggunakan $parent bukanlah praktik yang baik di sini. Anda bisa/harus menggunakan ngInit untuk membuat alias dari indeks induk, seperti ini:

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

Demo

Semua 3 komentar

Ini bukan masalah di Angular. Ini terjadi ( seperti yang didokumentasikan ), karena ngIf membuat lingkup baru, jadi $parent tidak merujuk ke lingkup luar ngRepeat .

Itulah mengapa menggunakan $parent bukanlah praktik yang baik di sini. Anda bisa/harus menggunakan ngInit untuk membuat alias dari indeks induk, seperti ini:

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

Demo

BTW, ini adalah pertanyaan dukungan umum. Pertanyaan seperti itu sebaiknya diarahkan ke saluran yang tepat .
Masalah GitHub dicadangkan untuk laporan bug dan permintaan fitur.

Terima kasih,

Saya bisa menggunakan ini dengan ng-init

Apakah halaman ini membantu?
0 / 5 - 0 peringkat