दिलचस्प पोस्ट
मैं एक एनएसएआरआर एनएसडीक्स के साथ कैसे सॉर्ट कर सकता हूँ? एलपीसीआरआर, एलपीसीटीआरटी और एलपीटीआरएसआर पायथन में ** क्वार्ज का उपयोग करने का उचित तरीका फायरबेज में, क्या सभी नोड डेटा को लोड किए बिना नोड के बच्चों की संख्या प्राप्त करने का कोई तरीका है? कैसे विंडोज डेस्कटॉप, सी # पर सीधे आकर्षित करने के लिए? जावा प्रतिनिधियों? HTTP बहु-भाग (POST) अनुरोध में सीमा पैरामीटर क्या है? त्रुटि: ओपनएसएसएल 1.1.0 में "अपूर्ण प्रकार 'आरएसए (उर्फ स्ट्रक्चर आरएसएएसटी) का अमान्य इस्तेमाल" Mongoose में पॉप्यूल किए जाने के बाद पूछताछ क्या मैं जावा रेगेक्स में समूह को बदल सकता हूँ? डायनामिक कनेक्शन स्ट्रिंग के लिए इकाई फ़्रेमवर्क सेटअप करें समान रूप से एक क्षेत्र पर एन अंक वितरण जावास्क्रिप्ट में, क्यों "यह" ऑपरेटर असंगत है? कैमरा आउटपुट के लिए कस्टम फ़िल्टर लागू करें EXC_BAD_ACCESS संकेत मिला

$ गुंजाइश और $ रूट स्कोप के बीच अंतर

क्या कोई $ दायरा और $ रूट स्कोप के बीच का अंतर समझा सकता है?

मुझे लगता है

$ गुंजाइश:

हम विशेष पृष्ठ से विशिष्ट नियंत्रक में एनजी-मॉडल गुण प्राप्त कर सकते हैं।


$ rootScope

हम किसी भी पृष्ठ में किसी भी नियंत्रक में सभी एनजी-मॉडल गुण प्राप्त कर सकते हैं।


क्या ये सही है? या फिर कुछ और?

वेब के समाधान से एकत्रित समाधान "$ गुंजाइश और $ रूट स्कोप के बीच अंतर"

"$ रूटस्स्कोप" एक वेब पेज में बनाए गए सभी "$ scope" कोणीय ऑब्जेक्ट का एक मूल ऑब्जेक्ट है।

यहां छवि विवरण दर्ज करें

ng-controller के साथ $ का गुंजाइश बनाया गया है जबकि ng-app के साथ $ जर्दी कोप बनाया गया है

यहां छवि विवरण दर्ज करें

मुख्य अंतर ऑब्जेक्ट के साथ सौंपे गए संपत्ति की उपलब्धता है। $ गुंजाइश के साथ सौंपी गई संपत्ति को नियंत्रक के बाहर इस्तेमाल नहीं किया जा सकता है, जिसमें इसे परिभाषित किया जाता है जबकि $ रूट स्कोप के साथ सौंपी गई संपत्ति को कहीं भी इस्तेमाल किया जा सकता है।

उदाहरण: यदि नीचे दिए गए उदाहरण में आपको $ गुंजाइश के साथ $ रूट स्कोप को बदलते हैं तो विभाग की संपत्ति दूसरे एक में पहले नियंत्रक से बनी नहीं जाएगी

 angular.module('example', []) .controller('GreetController', ['$scope', '$rootScope', function($scope, $rootScope) { $scope.name = 'World'; $rootScope.department = 'Angular'; } ]) .controller('ListController', ['$scope', function($scope) { $scope.names = ['Igor', 'Misko', 'Vojta']; } ]); 
 <script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.2.23/angular.min.js"></script> <body ng-app="example"> <div class="show-scope-demo"> <div ng-controller="GreetController"> Hello {{name}}! </div> <div ng-controller="ListController"> <ol> <li ng-repeat="name in names">{{name}} from {{department}}</li> </ol> </div> </div> </body> 

स्कोपर्स के लिए कांसर की डेवलपर की मार्गदर्शिका के अनुसार:

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

दोनों नियंत्रकों और निर्देशों के दायरे के संदर्भ हैं, लेकिन एक दूसरे के लिए नहीं। यह व्यवस्था नियंत्रक को निर्देश और डीओएम से अलग करती है। यह एक महत्वपूर्ण बिंदु है क्योंकि इससे नियंत्रक अज्ञेय को देखता है, जिससे अनुप्रयोगों के परीक्षण की कहानी में सुधार आया है।

$rootScope विश्व स्तर पर उपलब्ध है, चाहे आप कितने नियंत्रक में हों, जबकि $scope वर्तमान नियंत्रक के लिए उपलब्ध है और यह बच्चों की है।

प्रत्येक एप्लिकेशन में कम से कम एक रूट स्कोप है और इसका जीवन चक्र ऐप के समान है और हर नियंत्रक का यह अपना दायरा हो सकता है, जिसे दूसरों के साथ साझा नहीं किया जाता है।

इस लेख को देखें:

https://github.com/angular/angular.js/wiki/Understanding-Scopes

दूसरी तरफ हम इसे देख सकते हैं; $rootScope वैश्विक है जबकि $scope स्थानीय है जब Controller को एक पृष्ठ पर असाइन किया जाता है, तो एक $scope चर का प्रयोग यहां हो सकता है क्योंकि यह इस नियंत्रक से जुड़ा है। लेकिन जब हम अपने मान को अन्य नियंत्रकों या सेवाओं तक साझा करना चाहते हैं, तो $rootScope का उपयोग किया जा रहा है (** वैकल्पिक तरीके हैं, हम मूल्यों को साझा कर सकते हैं लेकिन इस मामले में हम $rootScope का उपयोग करना चाहते हैं)

आप उन दो शब्दों को परिभाषित करने के बारे में आपका दूसरा प्रश्न सही है।

अंत में थोड़ा सा ट्रैक, कृपया देखभाल के साथ $rootScope उपयोग करें। जिस तरह से आप वैश्विक चर का उपयोग करते हैं, उसी तरह डिबग करने के लिए एक दर्द हो सकता है और आप गलती से किसी भी टाइमर के अंदर कहीं भी ग्लोबल वैरिएबल को बदल सकते हैं या ऐसा कुछ जिससे आपका पठन गलत हो।

मैं आपको स्कोप के लिए आधिकारिक गहन एन्जिलल प्रलेख पढ़ता हूं। 'स्कोप पदानुक्रम' अनुभाग पर प्रारंभ करें:

https://docs.angularjs.org/guide/scope

अनिवार्य रूप से, $ रूटस्स्कोप और $ गुंजाइश दोनों ही डीओएम के विशिष्ट भागों की पहचान करते हैं जिसके भीतर

  • कोणीय संचालन किया जाता है
  • वेरिएबल्स को $ रूट स्कोप के हिस्से के रूप में घोषित किया गया है या $ गुंजाइश उपलब्ध हैं

$ रूट स्कोप से संबंधित कोई भी चीज आपके कोनेरी ऐप पर दुनिया भर में उपलब्ध है, जबकि जो कुछ भी $ के दायरे से है वह DOM के अंतर्गत उपलब्ध है, जिस पर यह दायरा लागू होता है।

$ रूट स्कोप को DOM तत्व पर लागू किया जाता है जो कांगरा ऐप के लिए मूल तत्व है (इसलिए नाम $ रूटस्स्कोप)। जब आप डीओएम के एक तत्व के एनजी-एप डायरेक्टिव को जोड़ते हैं, तो यह DOM का मूल तत्व बन जाता है जिसके भीतर $ रूट स्कोप उपलब्ध है। दूसरे शब्दों में, $ rootScope की प्रॉपर्टी इत्यादि आपके पूरे कॉन्युलर एप्लीकेशन में उपलब्ध होगी।

एक एंज्यूलर $ दायरा (और इसके सभी के वैरिएबल और ऑपरेशंस) आपके ऐप्लिकेशन के अंतर्गत DOM के एक विशेष उपसमुच्चय के लिए उपलब्ध है। विशेष रूप से, किसी भी विशेष नियंत्रक के लिए $ का दायरा DOM के भाग के लिए उपलब्ध है, जिसमें उस विशेष नियंत्रक को लागू किया गया है (एनजी-नियंत्रक निर्देश का उपयोग करके) हालांकि, हालांकि कुछ निर्देशों जैसे एनजी-दोहराएं, जब डीओएम के एक हिस्से के अंदर आवेदन किया जाता है जहां नियंत्रक लागू किया गया है, तो एक ही नियंत्रक के भीतर – मुख्य नियंत्रक के बाल स्कोप बना सकते हैं – एक नियंत्रक में केवल एक ही अवसर नहीं है

यदि आप अपने एन्जिलल ऐप को चलाते समय जनरेटेड एचटीएमएल को देखते हैं, तो आप आसानी से देख सकते हैं कि कौन सी डीओएम तत्वों में एक गुंजाइश है, जैसा कि कोणीय क्लास एनजी-स्कोप जोड़ता है, जिस पर एक दायरा लागू किया गया है (मूल तत्व सहित एप का, जिसमें $ रूट स्कोप है)।

वैसे, $ गुंजाइश और $ रूटस्स्कोप की शुरुआत में '$' चिह्न केवल अंगुलियों में एक पहचानकर्ता के सामान के लिए है जो कोनेरी द्वारा आरक्षित है

ध्यान दें कि मॉड्यूल और नियंत्रकों के बीच चर को साझा करने के लिए $ rootScope का उपयोग करना आम तौर पर सर्वोत्तम अभ्यास नहीं माना जाता है। जावास्क्रिप्ट डेवलपर्स वैश्विक चरम के 'प्रदूषण' से बचने के बारे में बात करते हैं, क्योंकि इसमें बाद में संघर्ष हो सकता है, अगर किसी अन्य नाम का एक वैरिएबल कहीं और इस्तेमाल किया जाता है, डेवलपर को यह महसूस करने के बिना कि पहले से ही $ रूट स्कोप पर घोषित किया गया है। इस आवेदन के आकार और इसे विकसित करने वाली टीम के साथ बढ़ जाती है। मूल रूप से $ रूटस्स्कोप में केवल स्थिर या स्थैतिक चर शामिल होंगे, जो पूरे ऐप में हर समय अनुरूप होने का इरादा है। मॉड्यूल में सामान साझा करने का एक बेहतर तरीका, सेवाओं और कारखानों का उपयोग करना हो सकता है, जो कि एक अन्य विषय है!

जॉन पापा के अंगुलर एसजेई शैली की तरह नई शैली ये सुझाव दे रही है कि हमें वर्तमान पृष्ठ के गुणों को बचाने के लिए $scope का उपयोग नहीं करना चाहिए। इसके बजाय हमें controllerAs with vm दृष्टिकोण के controllerAs with vm उपयोग करना चाहिए जहां दृश्य नियंत्रक ऑब्जेक्ट से स्वयं को बांधता है। तब नियंत्रक के वाक्यविन्यास का उपयोग करते समय इसके लिए एक कैप्चर वैरिएबल का उपयोग करें लगातार वैरिएबल नाम चुनें जैसे कि vm, जो कि ViewModel के लिए खड़ा है।

हालांकि आपको अभी भी इसकी देखरेख क्षमताओं के लिए $scope आवश्यकता होगी