2013-05-09 7 views
5

मैं निम्नलिखित जावास्क्रिप्ट/कोणीय कोड है को संदर्भित जब:कोणीय जे एस: angular.copy ब्राउज़र दुर्घटनाओं एक वस्तु किसी अन्य वस्तु

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

angular.copy आग, ब्राउज़र को ताले है। मुझे लगता है कि ऐसा इसलिए है क्योंकि प्रतिलिपि कार्य एक गहरी प्रतिलिपि कर रहा है, और जब यह बी के संदर्भ को प्रतिलिपि बनाना शुरू करता है, तो यह बी में जाता है और फिर इसके संदर्भ को प्रतिलिपि बनाना चाहता है, इस प्रकार एक परिपत्र प्रतिलिपि बनाना, जो कभी नहीं होगा समाप्त।

क्या यह धारणा सही है? यदि हां, तो क्या इससे बचने का कोई तरीका है? मुझे लगता है कि जवाब में मेरा डेटा दिखने के तरीके को बदलने में शामिल होगा, लेकिन मैं किसी अन्य व्यक्ति के विचारों को सुनने के लिए उत्सुक हूं।

उत्तर

2

आपकी धारणा सही है, समस्या परिपत्र संदर्भ है। JSON.stringify इस संरचना के बारे में भी शिकायत करेगा। jQuery.extend एक बहुत ही बुनियादी स्तर पर परिपत्र संदर्भों का पता लगाता है और यहां आपके मूल उदाहरण को संभाल सकता है, लेकिन jQuery.extend has its own issues as well। आप पहले से ही jQuery का उपयोग कर रहे हैं, तो आप सिर्फ विस्तार उपयोग कर सकते हैं, लेकिन अन्यथा आप अपने आप को कुछ लिख को देखने के लिए चाहते हो सकता है, या आप इस फैंसी cloneObject समारोह मैं गूगल के माध्यम से पाया उपयोग कर सकते हैं:

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

+0

दिलचस्प। मेरी धारणा को साफ़ करने के लिए धन्यवाद। मेरे डेटा की संरचना की तरह लगता है कि बस बदला जाना चाहिए ... – incutonez

+0

क्या आप इसे कैसे तय करते हैं? क्या आप इसे एक परिपत्र संदर्भ के साथ काम करने में सक्षम थे? – testing123

+0

हमने इसे अपने डेटा मॉडल को पुन: काम करके तय किया है। बच्चे को वास्तविक मूल वस्तु नोड देने के बजाय, हमने प्रत्येक बच्चे को एक बच्चा नोड और पैरेंट नोड आईडी जोड़ा ... इसलिए जब हम पोते बनाने के लिए जाते हैं, तो अपने माता-पिता की आईडी के साथ पास करना आसान होता है। – incutonez

संबंधित मुद्दे