इन फ़ंक्शन कॉल्स के बीच और क्या होता है?
विभिन्न निर्देश कार्यों दो अन्य कोणीय कार्यों कहा जाता है के भीतर से क्रियान्वित कर रहे हैं $compile(जहां निर्देश के compileमार डाला जाता है) और एक आंतरिक समारोह कहा जाता है nodeLinkFn(जहां निर्देश के controller, preLinkऔर postLinkक्रियान्वित कर रहे हैं)। निर्देश कार्यों के पहले और बाद में कोणीय कार्य के भीतर विभिन्न चीजें होती हैं। शायद सबसे विशेष रूप से बच्चे की पुनरावृत्ति है। निम्नलिखित सरलीकृत चित्रण संकलन और लिंक चरणों के भीतर महत्वपूर्ण चरण दिखाता है:

इन चरणों को प्रदर्शित करने के लिए, कृपया निम्न HTML मार्कअप का उपयोग करें:
<div ng-repeat="i in [0,1,2]">
<my-element>
<div>Inner content</div>
</my-element>
</div>
निम्नलिखित निर्देश के साथ:
myApp.directive( 'myElement', function() {
return {
restrict: 'EA',
transclude: true,
template: '<div>{{label}}<div ng-transclude></div></div>'
}
});
संकलन
compileएपीआई दिखता है तो चाहते:
compile: function compile( tElement, tAttributes ) { ... }
अक्सर मापदंडों को उपसर्ग tदिया जाता है ताकि तत्वों और विशेषताओं को सूचित किया जा सके जो स्रोत टेम्पलेट के हैं, उदाहरण के बजाय।
compileट्रांसकोड की गई सामग्री को कॉल करने से पहले (यदि कोई हो) हटा दिया जाता है, और टेम्पलेट मार्कअप पर लागू होता है। इस प्रकार, compileफ़ंक्शन को प्रदान किया गया तत्व ऐसा दिखेगा:
<my-element>
<div>
"{{label}}"
<div ng-transclude></div>
</div>
</my-element>
ध्यान दें कि इस बिंदु पर ट्रांसकोड की गई सामग्री फिर से नहीं डाली गई है।
निर्देश के लिए कॉल के बाद .compile, कोणीय उन सभी बाल तत्वों को पीछे छोड़ देगा, जिनमें वे भी शामिल हो सकते हैं जो केवल निर्देश (टेम्पलेट तत्व, उदाहरण के लिए) द्वारा पेश किए गए हैं।
सृजन की वृत्ति
हमारे मामले में, ऊपर स्रोत टेम्पलेट के तीन उदाहरण (द्वारा ng-repeat) बनाए जाएंगे । इस प्रकार, निम्नलिखित अनुक्रम तीन बार निष्पादित करेगा, एक बार प्रति उदाहरण।
नियंत्रक
controllerएपीआई शामिल है:
controller: function( $scope, $element, $attrs, $transclude ) { ... }
लिंक चरण में प्रवेश, लिंक फ़ंक्शन के माध्यम से लौटा $compileअब एक गुंजाइश के साथ प्रदान की जाती है।
सबसे पहले, लिंक फ़ंक्शन अनुरोध किए जाने पर एक चाइल्ड स्कोप ( scope: true) या एक अलग स्कोप ( scope: {...}) बनाता है ।
नियंत्रक तब निष्पादित किया जाता है, उदाहरण तत्व के दायरे के साथ प्रदान किया जाता है।
पूर्व लिंक
pre-linkएपीआई दिखता है तो चाहते:
function preLink( scope, element, attributes, controller ) { ... }
वस्तुतः कॉल के बीच निर्देश .controllerऔर .preLinkफ़ंक्शन के बीच कुछ भी नहीं होता है । कोणीय अभी भी सिफारिश प्रदान करता है कि प्रत्येक का उपयोग कैसे किया जाना चाहिए।
.preLinkकॉल के बाद , लिंक फ़ंक्शन प्रत्येक चाइल्ड एलिमेंट को पार कर जाएगा - सही लिंक फ़ंक्शन को कॉल करना और इसे वर्तमान स्कोप को संलग्न करना (जो बाल तत्वों के लिए मूल गुंजाइश के रूप में कार्य करता है)।
पोस्ट-लिंक
post-linkएपीआई के समान है pre-linkसमारोह:
function postLink( scope, element, attributes, controller ) { ... }
शायद यह ध्यान देने योग्य है कि एक बार एक निर्देश के .postLinkकार्य को बुलाया जाता है, इसके सभी बच्चों के तत्वों की लिंक प्रक्रिया पूरी हो गई है, जिसमें बच्चों के सभी .postLinkकार्य शामिल हैं।
इसका मतलब यह है कि जब तक .postLinkकॉल किया जाता है, तब तक बच्चे 'लाइव' तैयार हो जाते हैं। यह भी शामिल है:
- अनिवार्य तथ्य
- ट्रांसकॉक्शन लागू किया गया
- गुंजाइश जुड़ी हुई है
इस स्तर पर टेम्पलेट इस प्रकार दिखाई देगा:
<my-element>
<div class="ng-binding">
"{{label}}"
<div ng-transclude>
<div class="ng-scope">Inner content</div>
</div>
</div>
</my-element>