Saya mendefinisikan filter khusus seperti:
<div class="idea item" ng-repeat="item in items" isoatom>
<div class="section comment clearfix" ng-repeat="comment in item.comments | range:1:2">
....
</div>
</div>
Seperti yang Anda lihat ng-repeat di mana filter sedang digunakan bersarang di ng-repeat lain
Filter didefinisikan seperti ini:
myapp.filter('range', function() {
return function(input, min, max) {
min = parseInt(min); //Make string input int
max = parseInt(max);
for (var i=min; i<max; i++)
input.push(i);
return input;
};
});
Saya mendapatkan:
Kesalahan: Duplikat dalam pengulang tidak diizinkan. Pengulang: komentar di item.comments | range: 1: 2 ngRepeatAction @ https://ajax.googleapis.com/ajax/libs/angularjs/1.1.4/an
<div ng-repeat="row in [1,1,1,2,2] |filter: 2 track by $index" >
"filter pencarian" harus sebelum "track by $ index"$index
ada variabel di suatu tempat?track by ($index + ':' + row)
sehingga akan memperbarui individu<ng-repeat>
kapan pun datanya diperbarui, serta ketika elemen baru ditambahkan, tanpa tersandung dupesBagi mereka yang mengharapkan JSON dan masih mendapatkan kesalahan yang sama, pastikan Anda mengurai data Anda:
sumber
Saya mengalami masalah dalam proyek saya di mana saya menggunakan ng-repeat track dengan $ index tetapi produk tidak mendapatkan refleksi ketika data berasal dari database. Kode saya adalah sebagai berikut:
Dalam kode di atas, produk adalah arahan terpisah untuk menampilkan produk. Tetapi saya mengetahui bahwa $ index menyebabkan masalah ketika kami meneruskan data dari ruang lingkup. Jadi kehilangan data dan DOM tidak bisa diperbarui.
Saya menemukan solusinya dengan menggunakan product.id sebagai kunci dalam ng-repeat seperti di bawah ini:
Tetapi kode di atas lagi gagal dan melempar kesalahan di bawah ini ketika lebih dari satu produk memiliki id yang sama:
angular.js: 11706 Kesalahan: [ngRepeat: dupes] Duplikat dalam pengulang tidak diperbolehkan. Gunakan ekspresi 'lacak per' untuk menentukan kunci unik. Pengulang
Jadi akhirnya saya menyelesaikan masalah dengan membuat kunci unik dinamis dari ng-repeat seperti di bawah ini:
Ini menyelesaikan masalah saya dan berharap ini akan membantu Anda di masa depan.
sumber
track by $index
akan lebih baik daripadatrack by (product.id + $index)
? Untuk satu hal,track by $index
lebih sederhana, dan untuk yang lain, Anda mungkin tidak benar-benar memiliki jaminan bahwa nilai-nilai(product.id + $index)
akan unik. Misalnya, jika array Anda dimulai dengan produk denganid
5 dan setelah itu ada produk denganid
4, nilai(product.id + $index)
keduanya akan menjadi 5 (5 + 0 untuk produk pertama, 4 +1 untuk yang kedua) dan Anda akan masih mendapatkan Duplikat dalam pengulang tidak diperbolehkan kesalahan.Apa yang ingin Anda lakukan dengan filter "rentang"?
Berikut ini contoh yang berhasil dari apa yang saya pikir Anda coba lakukan: http://jsfiddle.net/evictor/hz4Ep/
HTML:
JS:
sumber
Jika kebetulan kesalahan ini terjadi saat bekerja dengan SharePoint 2010: Ganti nama ekstensi file .json Anda dan pastikan untuk memperbarui jalur restService Anda. Tidak diperlukan tambahan "track by $ index".
Untungnya saya meneruskan tautan ini ke alasan ini:
Setelah ekstensi file diubah, harus siap.
sumber
Kalau-kalau ini terjadi pada orang lain, saya mendokumentasikan ini di sini, saya mendapatkan kesalahan ini karena saya keliru mengatur model-ng sama dengan array ng-repeat:
Dari pada:
Saya memeriksa array dan tidak memiliki duplikat, cukup periksa variabel Anda.
sumber
Duplikat dalam pengulang tidak diizinkan. Gunakan ekspresi 'lacak per' untuk menentukan kunci unik.
Contoh
sumber
Jika Anda memanggil pengulangan dalam tag <ul>, Anda mungkin dapat memperbolehkan duplikat. Lihat tautan ini untuk referensi. Lihat Todo2.html
sumber
JSON
Respons saya seperti ini:Jadi, saya biasa
ng-repeat = "item in variables.items"
menampilkannya.sumber
Duplikat dalam pengulang tidak diizinkan. Gunakan ekspresi 'lacak per' untuk menentukan kunci unik. Pengulang: sdetail di mydt, Kunci duplikat: string:, Nilai duplikat:
Jadi kesalahan ini juga dapat terjadi ketika Anda mengambil data dari basis data, yang namanya salah ditulis oleh Anda.
sumber