2013-05-09 4 views
5

Ho il seguente JavaScript/code angolare:JS angolari: angular.copy crash del browser quando un oggetto fa riferimento a un altro oggetto

var a = {}; 
var b = {}; 
a.ref = b; 
b.ref = a; 
angular.copy(a); 

Quando angular.copy incendi, il browser si blocca. Suppongo che questo sia dovuto al fatto che la funzione di copia sta facendo una copia profonda, e quando inizia a copiare il riferimento a di b, va in b e quindi vuole copiare il riferimento a a, creando così una copia circolare, che non sarà mai fine.

Questa ipotesi è corretta? Se è così, c'è un modo per evitarlo? Suppongo che la risposta implichi un cambiamento nel modo in cui appaiono i miei dati, ma sono curioso di sentire i pensieri di un'altra persona.

risposta

2

L'ipotesi è corretta, il problema è il riferimento circolare. JSON.stringify si lamenterà anche di questa struttura. jQuery.extend rileva i riferimenti circolari a un livello molto semplice e può gestire qui il tuo esempio di base, ma jQuery.extend has its own issues as well. Se si sta già utilizzando jQuery, si può semplicemente utilizzare estendere, ma per il resto si consiglia di guardare a scrivere qualcosa di te stesso, oppure è possibile utilizzare questa funzione cloneObject fantasia ho trovato tramite Google:

https://gist.github.com/NV/1396086

+0

Interessante. Grazie per aver chiarito la mia ipotesi. Sembra che la struttura dei miei dati debba essere modificata ... – incutonez

+0

È così che l'hai risolto? Eri in grado di farlo funzionare con una referenza circolare? – testing123

+0

L'abbiamo risolto rielaborando il nostro modello di dati. Invece di dare al nodo figlio l'attuale oggetto genitore, abbiamo aggiunto un nodo figlio e un ID nodo genitore a ogni bambino ... quindi quando andiamo a creare i nipoti, è facile passare l'ID del genitore. – incutonez