2012-12-12 14 views
14

अंगुलरजेएस में बाइंडिंग को डिस्कनेक्ट करने का उचित तरीका क्या है?एंगुलरजेएस - मेमोरी लीक से बचने के लिए बाइंडिंग हटाएं

मेरे पास कोई भी कोणीय अनुप्रयोग नहीं है जो एक घटक लोड कर रहा है जो डेटा-बाध्यकारी करने के लिए कोणीय का उपयोग करता है। किसी बिंदु पर मैं घटक को नष्ट करना चाहता हूं और यह सुनिश्चित करना चाहता हूं कि कोई मेमोरी लीक न हो। मैं डीओएम के उस हिस्से से सभी घटना श्रोताओं को हटाने के लिए कोणीय कैसे कहूं?

क्या $(node).remove() चाल करेगा, या कोणीय को स्मृति में अन्य चीजों को साफ करने की आवश्यकता है ...? कोणीय में मेम-लीक से बचने पर किसी भी अन्य सुझाव की सराहना की जाएगी।

उत्तर

10

बस एक डीओएम तत्व को हटा रहा है जिसमें remove() जैसी किसी चीज़ के साथ स्कोप है, स्मृति में स्कोप से छुटकारा नहीं मिलेगा। आप तत्व को हटाकर और Batarang देखकर, या माता-पिता के दायरे को प्राप्त करके और उसके बच्चों की जांच करके इसकी पुष्टि कर सकते हैं। आप देखेंगे कि दायरा अभी भी है .... तो आप स्कोप पर $destroy() पर भी कॉल करना चाहेंगे।

More information about $destroy() can be found here

संपादित करें: एक बात मुझे यकीन नहीं है, अगर यह पूरी तरह से गुंजाइश हटा देता है, या बस इसे डिस्कनेक्ट करता है और जावास्क्रिप्ट जीसी बाकी की देखभाल करता है।

+0

त्वरित प्रतिक्रिया के लिए धन्यवाद! –

+0

दस्तावेज़ों का कहना है कि दायरे और डीओएम तत्व को अनइंड करने के लिए एक jQuery ईवेंट भी है लेकिन उदाहरण का उपयोग केस नहीं देता है। क्या यह तत्वों के दायरे को खोजने, नष्ट करने की विधि का आह्वान करने और फिर jquery remove() का उपयोग करने का मामला है? यह अजीब लगता है कि यह कार्यक्षमता कोणीय के अंदर एक पूर्ण कार्य के रूप में मौजूद नहीं है! – sidonaldson

+0

यदि आप window.leak के लिए एक दायरा असाइन करते हैं और फिर दायरे पर एक कंसोल लॉग सेट करते हैं। $ ('नष्ट', ...) पर आप देखेंगे कि विनाश कहा जाता है लेकिन आप अभी भी रिसाव से दायरे तक पहुंच सकते हैं। –

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