2015-04-08 21 views
7

मैं एक निर्देश लिख रहा हूं जिसे वर्तमान डीओएम तत्व का दायरा पुनः प्राप्त करने की आवश्यकता है। गैर सार्वजनिक एपीआई angular.element().scope();डीबग जानकारी अक्षम होने पर डीओएम तत्व का दायरा पाने का कोई तरीका है?

यह तब तक अच्छा काम करता है जब तक कोणीय 1.3 एक नई सुविधा $compileProvider.debugInfoEnabled(false); पेश करता है जिसका मुख्य उद्देश्य डीओएम तत्व में बाध्य डेटा से बचने के लिए प्रदर्शन में सुधार करना है। लेकिन जब debugInfoEnabled() को गलत पर सेट किया गया है, angular.element().scope()undefined लौटाएगा। इसलिए मुझे किसी DOM तत्व का दायरा प्राप्त करने का एक और तरीका मिलना चाहिए या मुझे अपना कोड तर्क फिर से डिजाइन करना होगा।

क्या यह संभव बनाने के लिए कोई तरीका है?

उत्तर

9

मुझे $compileProvider.debugInfoEnabled(false); के साथ हमारे ऐप को संकलित करने के बाद हमारे आवेदन में एक ही समस्या का सामना करना पड़ा। मुझे बाद में हमारे कुछ निर्देशों के अलग-अलग दायरे तक पहुंचने की आवश्यकता थी, लेकिन isolateScope() विधि का उपयोग नहीं कर सका।

this.setElementIsolateScope = function(element, scope) { 
    element[0].isolateScope = function() { 
     return scope; 
    }; 
}; 
तो किसी भी निर्देश जहां मैं बाद में link() अंदर अलग गुंजाइश मैं इस समारोह कहा जाता है उपयोग करने में सक्षम होने की जरूरत के अंदर

: समस्या को हल करने के लिए, मैं एक Utils सेवा में एक सहायक समारोह है कि इस तरह दिखता है बनाया फ़ंक्शन: चूंकि element एक jqLite ऑब्जेक्ट है, तो आपको पर isolateScope() फ़ंक्शन सेट करने की आवश्यकता है। आपके पास पहले से ही jqLite लिपटे element और scope पहले से ही आपके लिंक फ़ंक्शन में पारित होना चाहिए, जिसे आप बस अपनी सेवा विधि में पास करते हैं।

Utils.setElementIsolateScope(element, scope); 

तो अलग गुंजाइश बाद में उपयोग करने के लिए, आप अपने तत्व के लिए संदर्भ मिलेगा और फिर इस (यह मानते हुए child_element अपने तत्व/निर्देश के संदर्भ में है) है:

var child_iso_scope = _.isFunction(child_element.isolateScope) && child_element.isolateScope(); 

पर कैसे निर्भर करता है बस के रूप में ऊपर उसी तरह का उपयोग अलग पाने के लिए

child_element = angular.element(child_element); 

और फिर: यदि आप अपने तत्व के संदर्भ में हो रही है, तो आप इस तरह यह एक jqLite आवरण रैप करने के लिए आवश्यकता हो सकती है गुंजाइश। उम्मीद है की यह मदद करेगा!

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