Saya telah mencoba melihat pada halaman Mozilla JSON yang menjernihkan dokumen mereka serta di sini di SO dan Google tetapi tidak menemukan penjelasan. Saya telah menggunakan JSOn sebagai pengikat banyak waktu tetapi tidak pernah menemukan hasil ini
Saya memiliki berbagai objek JSON
[
{
"param_2": "Description 1",
"param_0": "Name 1",
"param_1": "VERSION 1"
},
{
"param_2": "Description 2",
"param_0": "Name 2",
"param_1": "VERSION 2"
},
{
"param_2": "Description 3",
"param_0": "Name 3",
"param_1": "VERSION 3"
}
]
terlampir pada saya $scope
dan agar POST
mereka sebagai salah satu parameter saya menggunakan metode JSON.stringify () dan saya mendapatkan yang berikut:
[
{
"param_2": "Description 1",
"param_0": "Name 1",
"param_1": "VERSION 1",
"$$hashKey": "005"
},
{
"param_2": "Description 2",
"param_0": "Name 2",
"param_1": "VERSION 2",
"$$hashKey": "006"
},
{
"param_2": "Description 3",
"param_0": "Name 3",
"param_1": "VERSION 3",
"$$hashKey": "007"
}
]
Saya hanya ingin tahu apa sebenarnya hashkey $$ karena saya mengharapkan sesuatu yang lebih mirip dengan yang berikut dari metode stringify:
[
{
"1":{
"param_2": "Description 1",
"param_0": "Name 1",
"param_1": "VERSION 1"
},
"2":{
"param_2": "Description 2",
"param_0": "Name 2",
"param_1": "VERSION 2"
},
"3":{
"param_2": "Description 3",
"param_0": "Name 3",
"param_1": "VERSION 3"
}
}
]
Saya tidak yakin apakah itu faktor tetapi saya menggunakan Angularjs 1.1.5, JQuery 1.8.2 and Spring 3.0.4 and Spring security 3.0.7 on the Server side
Itu tidak menyebabkan saya masalah tetapi saya ingin tahu penyebab dan alasan untuk $$hashkey
sumber
Jawaban:
Angular menambahkan ini untuk melacak perubahan Anda, jadi ia tahu kapan harus memperbarui DOM.
Jika Anda menggunakan
angular.toJson(obj)
alih-alihJSON.stringify(obj)
maka Angular akan menghapus nilai penggunaan internal ini untuk Anda.Juga, jika Anda mengubah ekspresi ulangi untuk menggunakan
track by {uniqueProperty}
akhiran, Angular tidak perlu menambahkan$$hashKey
sama sekali. Sebagai contohIngatlah selalu bahwa Anda memerlukan "tautan." bagian dari ekspresi - Saya selalu cenderung lupa itu. Hanya
track by href
pasti tidak akan bekerja.sumber
item in somelist | filter:somefilter track by item.key
jangan menulis filter di akhir baris!Dalam kasus penggunaan saya (memberi makan objek yang dihasilkan ke X2JS) pendekatan yang direkomendasikan
membantu menghapus
$$hashKey
properti, tetapi hasilnya kemudian tidak bisa lagi diproses oleh X2JS .menghapus
$$hashKey
properti juga, tetapi hasilnya tetap dapat digunakan sebagai parameter untuk X2JS.sumber
Itu datang dengan arahan ng-repeat biasanya. Untuk melakukan manipulasi dom, AngularJS menandai objek dengan id khusus.
Ini biasa terjadi pada Angular. Misalnya jika Anda mendapatkan objek dengan ngResource, objek Anda akan menyematkan semua API sumber daya dan Anda akan melihat metode seperti $ save, dll. Dengan cookie terlalu AngularJS akan menambahkan properti __ngDebug.
sumber
Jika Anda tidak ingin menambahkan id ke data Anda, Anda dapat melacak dengan indeks dalam array, yang akan menyebabkan item dikunci oleh posisi mereka dalam array bukan nilainya.
Seperti ini:
sumber
Jika Anda menggunakan Angular 1.3 atau lebih tinggi, saya sarankan Anda menggunakan "track by" di ng-repeat Anda. Angular tidak menambahkan properti "$$ hashKey" ke objek dalam array Anda jika Anda menggunakan "track by". Anda juga mendapatkan manfaat kinerja, jika sesuatu dalam array Anda berubah, angular tidak membuat ulang seluruh struktur DOM untuk ulangi ng Anda, itu malah menciptakan kembali bagian DOM untuk nilai-nilai dalam array Anda yang telah berubah.
sumber
Pembaruan: Dari Angular v1.5, lacak
$index
sekarang adalah sintaks standar alih-alih menggunakan tautan karena memberi sayang-repeat
kesalahan dupes.Saya berlari ke ini untuk bersarang
ng-repeat
dan di bawah ini berhasil.sumber
Berikut adalah cara Anda dapat dengan mudah menghapus hashKey $$ dari objek:
$scope.myObject
- Mengacu pada Objek yang ingin Anda lakukan operasi yaitu menghapus $ hashKey dari$scope.myNewObject
- Tetapkan objek asli yang dimodifikasi ke objek baru sehingga dapat digunakan seperlunyasumber
https://www.timcosta.io/angular-js-object-comparisons/
Angular cukup ajaib saat pertama kali orang melihatnya. Pembaruan DOM otomatis ketika Anda memperbarui variabel di JS Anda, dan variabel yang sama akan memperbarui dalam file JS Anda ketika seseorang memperbarui nilainya di DOM. Fungsi yang sama ini berfungsi di seluruh elemen halaman, dan di seluruh pengontrol.
Kunci dari semua ini adalah $$ hashKey Angular menempel pada objek dan array yang digunakan dalam ng-ulangan.
$ HashKey ini menyebabkan banyak kebingungan bagi orang-orang yang mengirim objek penuh ke API yang tidak menghapus data tambahan. API akan mengembalikan 400 untuk semua permintaan Anda, tetapi $$ hashKey tidak akan pergi dari objek Anda.
Angular menggunakan hashKey $$ untuk melacak elemen mana di DOM yang termasuk item mana dalam array yang sedang di-loop dalam ng-repeat. Tanpa $$ hashKey Angular tidak akan memiliki cara untuk menerapkan perubahan yang terjadi dalam JavaScript atau DOM ke mitra mereka, yang merupakan salah satu kegunaan utama untuk Angular.
Pertimbangkan array ini:
Jika kami merendernya ke dalam daftar menggunakan ng-repeat = "user in users", setiap objek di dalamnya akan menerima hashKey $$ untuk tujuan pelacakan dari Angular. Berikut adalah dua cara untuk menghindari hashKey $$ ini.
sumber