javascript - जांच कैसे करें कि क्या गुंजाइश अलग है?




angularjs angularjs-scope (2)

क्या किसी भी तरह संभव है यह जांचने के लिए कि क्या कोणीय गुंजाइश अलग है या नहीं, केवल गुंजाइश है?

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

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


आप इसे इस तरह देख सकते हैं:

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

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

स्पष्टीकरण:

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

  2. scope.$root !== scope यह जांच कर कि गुंजाइश $rootScope नहीं $rootScope

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


प्रलेखन के अनुसार, निम्नलिखित चाल करना चाहिए:

$element.isolateScope()

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

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

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

$compileProvider.debugInfoEnabled(false);

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

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








angularjs-scope