आपको यह समझने की आवश्यकता है कि इसे समझने के लिए AngularJS कैसे काम करता है।
पाचन चक्र और $ गुंजाइश
सबसे पहले और सबसे महत्वपूर्ण, AngularJS एक तथाकथित पाचन चक्र की अवधारणा को परिभाषित करता है । इस चक्र को एक लूप माना जा सकता है, जिसके दौरान AngularJS यह जांचता है कि क्या सभी चरों द्वारा देखे गए सभी चरों में कोई बदलाव है $scope
। इसलिए यदि आपने $scope.myVar
अपने नियंत्रक में परिभाषित किया है और इस चर को देखे जाने के लिए चिह्नित किया गया है , तो आप स्पष्ट रूप से AngularJS को इन परिवर्तनों की निगरानी के लिए बता रहे हैंmyVar
लूप के प्रत्येक पुनरावृत्ति में ।
एक स्वाभाविक अनुवर्ती प्रश्न होगा: क्या सब कुछ $scope
देखा जा रहा है से जुड़ा हुआ है ? सौभाग्य से, नहीं। यदि आप अपने में हर वस्तु में बदलाव के लिए देखते हैं $scope
, तो जल्दी से एक पचाने वाले लूप का मूल्यांकन करने में उम्र लग जाएगी और आप जल्दी से प्रदर्शन के मुद्दों में भाग लेंगे। यही कारण है कि एंगुलरजेएस टीम ने हमें कुछ $scope
चर घोषित करने के दो तरीके बताए हैं, जिन्हें देखा जा रहा है (नीचे पढ़ें)।
$ घड़ी $ गुंजाइश परिवर्तनों के लिए सुनने में मदद करती है
एक $scope
चर को देखने के रूप में घोषित करने के दो तरीके हैं ।
- अभिव्यक्ति के माध्यम से अपने टेम्पलेट में इसका उपयोग करके
<span>{{myVar}}</span>
$watch
सेवा के माध्यम से इसे मैन्युअल रूप से जोड़कर
विज्ञापन 1) यह सबसे आम परिदृश्य है और मुझे यकीन है कि आपने इसे पहले भी देखा है, लेकिन आप नहीं जानते कि इसने पृष्ठभूमि में एक घड़ी बनाई है। हाँ, यह था! AngularJS निर्देशों का उपयोग करना (जैसे किng-repeat
) भी निहित घड़ियों का निर्माण कर सकता है।
विज्ञापन 2) यह आप अपनी खुद की घड़ियों का निर्माण करते हैं । $watch
सेवा आपको कुछ कोड चलाने में मदद करती है जब कुछ मूल्य $scope
बदले गए हैं। यह शायद ही कभी इस्तेमाल किया जाता है, लेकिन कभी-कभी मददगार होता है। उदाहरण के लिए, यदि आप प्रत्येक बार 'myVar' परिवर्तन के लिए कुछ कोड चलाना चाहते हैं, तो आप निम्न कार्य कर सकते हैं:
function MyController($scope) {
$scope.myVar = 1;
$scope.$watch('myVar', function() {
alert('hey, myVar has changed!');
});
$scope.buttonClicked = function() {
$scope.myVar = 2; // This will trigger $watch expression to kick in
};
}
$ लागू डाइजेस्ट चक्र के साथ परिवर्तनों को एकीकृत करने में सक्षम बनाता है
आप $apply
फ़ंक्शन को एक एकीकरण तंत्र के रूप में सोच सकते हैं । आप देखते हैं, हर बार जब आप कुछ देखे गए चर को बदलते हैं$scope
सीधे वस्तु हैं, तो AngularJS को पता चलेगा कि परिवर्तन हो चुका है। ऐसा इसलिए है क्योंकि AngularJS पहले से ही उन परिवर्तनों की निगरानी करना जानता था। इसलिए यदि यह फ्रेमवर्क द्वारा प्रबंधित कोड में होता है, तो पाचन चक्र आगे बढ़ेगा।
हालाँकि, कभी-कभी आप AngularJS की दुनिया के बाहर कुछ मूल्य बदलना चाहते हैं और सामान्य रूप से परिवर्तन को देखते हैं। इस पर विचार करें - आपके पास एक $scope.myVar
मूल्य है जिसे एक jQuery के $.ajax()
हैंडलर के भीतर संशोधित किया जाएगा । यह भविष्य में किसी बिंदु पर होगा। AngularJS ऐसा होने के लिए इंतजार नहीं कर सकता, क्योंकि इसे jQuery पर प्रतीक्षा करने का निर्देश नहीं दिया गया है।
इससे निपटने के लिए, $apply
पेश किया गया है। यह आपको पाचन चक्र को स्पष्ट रूप से शुरू करने देता है। हालाँकि, आपको इसका उपयोग केवल कुछ डेटा को AngularJS (अन्य फ्रेमवर्क के साथ एकीकरण) में माइग्रेट करने के लिए करना चाहिए, लेकिन नियमित AngularJS कोड के साथ संयुक्त इस पद्धति का उपयोग कभी न करें, क्योंकि AngularJS तब एक त्रुटि करेगा।
यह सब डोम से कैसे संबंधित है?
ठीक है, आपको वास्तव में ट्यूटोरियल को फिर से पालन करना चाहिए, अब जब आप यह सब जानते हैं। पाचन चक्र सुनिश्चित करेगा कि यूआई और जावास्क्रिप्ट कोड सभी के साथ जुड़े हुए प्रत्येक द्रष्टा का मूल्यांकन करके तब तक सिंक्रनाइज़ रहें, $scope
जब तक कुछ भी नहीं बदलता। अगर डाइजेस्ट लूप में अधिक बदलाव नहीं होते हैं, तो इसे समाप्त माना जाता है।
आप ऑब्जेक्ट को $scope
ऑब्जेक्ट को या तो स्पष्ट रूप से कंट्रोलर में संलग्न कर सकते हैं , या उन्हें {{expression}}
सीधे दृश्य में रूप में घोषित कर सकते हैं।
मुझे उम्मीद है कि इस सब के बारे में कुछ बुनियादी ज्ञान को स्पष्ट करने में मदद करता है।
आगे की रीडिंग: