2016-04-29 3 views
9

क्या यह जांचना किसी भी तरह से संभव है कि कोणीय दायरा अलग हो या नहीं, केवल दायरा है?स्कॉप अलग होने पर जांच कैसे करें?

मुझे पता है, अलग और अलग-अलग क्षेत्रों में अलग-अलग प्रोटोटाइप नहीं हैं। हालांकि ये प्रोटोटाइप कोणीय में निजी हैं और आसानी से पहुंचा नहीं जा सकता है। प्रोटोटाइप नाम की जांच करना बहुत गंदा दृष्टिकोण लगता है।

कोई बेहतर विचार?

+0

$ माता-पिता होने पर जांच करने के बारे में कैसे? – thegio

+0

अलग-अलग क्षेत्रों में माता-पिता भी हैं। केवल रूट स्कोप नहीं है। –

+0

मैं आपके प्रश्न का उत्तर किसी अन्य प्रश्न के साथ करने जा रहा हूं ... क्यों? हाहा – r0m4n

उत्तर

2

मुझे पता है कि पहला अंतर यह है कि पृथक दायरे में "$ रूट" फ़ील्ड है, जो रूटस्कोप है।

दूसरा अंतर है, कि पृथक गुंजाइश "$$ isolateBindings" फ़ील्ड में, है, लेकिन नहीं पृथक

+1

'$$' के साथ उपसर्ग किए गए किसी भी चीज़ का उपयोग करके सावधान रहें। वे AngularJS के लिए निजी होने के लिए हैं और किसी भी समय हटाया जा सकता है। –

+0

हाँ आप सही हैं, लेकिन यह लंबे समय तक है कि क्षेत्र मौजूद है .. –

+0

यह सच है, लेकिन आपको इसे 'हैऑनप्रॉपर्टी' के साथ जांचना याद रखना चाहिए। यदि आप नहीं करते हैं तो यह आपको गलत परिणाम देगा क्योंकि स्कोप प्रोटोटाइपिक रूप से कुछ स्तर पर एक अलग दायरे से निकलता है। –

1

प्रलेखन प्रति नहीं है, चाल करना चाहिए निम्नलिखित:

$element.isolateScope() 

एक अलग दायरे को पुनर्प्राप्त करता है यदि कोई सीधे वर्तमान तत्व से जुड़ा हुआ है। यह गेटर केवल उन तत्वों पर उपयोग किया जाना चाहिए जिनमें निर्देश शामिल है जो एक नया पृथक दायरा शुरू करता है। इस तत्व पर कॉलिंग स्कोप() हमेशा मूल गैर-अलग-अलग दायरे को वापस कर देता है। डीबग डेटा सक्षम होना आवश्यक है।

https://docs.angularjs.org/api/ng/function/angular.element#jquery-jqlite-extras

, डॉक्स में उल्लेख किया है, तो आप कॉन्फ़िगर (जैसा कि आप उत्पादन में चाहिए) निम्नलिखित:

$compileProvider.debugInfoEnabled(false); 

इस विधि अब काम नहीं करेंगे ... मैं प्राथमिक लगता होगा isolateScope प्राप्त करने का कारण यूनिट परीक्षणों के लिए है और वास्तव में स्कोप अलगाव पर कुछ क्रिया करने का कोई कारण नहीं है (यदि मैं गलत हूं तो मुझे सही करें)।

https://jsfiddle.net/r0m4n/f84yzdt4/

0

आप इस तरह यह जांच कर सकते हैं:

if (scope.hasOwnProperty('$root') && scope.$root !== scope && scope.$root) { 
    // the scope is isolate 
} 

यह सही रूप में यह कार्यान्वयन विवरण पर निर्भर करता है नहीं है, लेकिन मैं कुछ भी इससे बेहतर नहीं सोच सकते हैं।

स्पष्टीकरण:

  1. scope.hasOwnProperty('$root')। प्रत्येक गुंजाइश में यह संपत्ति है। यह निकटतम पूर्वजों के दायरे को इंगित करता है जो अलग है या $rootScope है। यह गुण prototypically विरासत में मिला है, इसलिए यह केवल अलग कार्यक्षेत्रों और $rootScope के लिए खुद है।

  2. scope.$root !== scope। यह जांच कर रहा है कि दायरा $rootScope नहीं है।

  3. scope.$root!scope.$$destroyed के साथ प्रतिस्थापित किया जा सकता है। जब एक गुंजाइश नष्ट हो जाती है, null$root समेत अपनी कई संपत्तियों को सौंपा गया है, इसलिए संपत्ति स्वयं बन जाती है।

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