कुछ स्थान निर्देशात्मक तर्क के लिए नियंत्रक फ़ंक्शन का उपयोग करते हैं और अन्य लिंक का उपयोग करते हैं। कोणीय मुखपृष्ठ पर टैब उदाहरण एक के लिए नियंत्रक और दूसरे निर्देश के लिए लिंक का उपयोग करता है। दोनों के बीच क्या अंतर है?
कुछ स्थान निर्देशात्मक तर्क के लिए नियंत्रक फ़ंक्शन का उपयोग करते हैं और अन्य लिंक का उपयोग करते हैं। कोणीय मुखपृष्ठ पर टैब उदाहरण एक के लिए नियंत्रक और दूसरे निर्देश के लिए लिंक का उपयोग करता है। दोनों के बीच क्या अंतर है?
जवाबों:
मैं आपके प्रश्न का थोड़ा विस्तार करने जा रहा हूं और संकलन फ़ंक्शन भी शामिल कर रहा हूं।
संकलित कार्य - टेम्पलेट डोम हेरफेर के लिए उपयोग (यानी, tElement = टेम्पलेट तत्व का हेरफेर), इसलिए जोड़तोड़ जो निर्देश के साथ जुड़े टेम्पलेट के सभी डोम क्लोन पर लागू होते हैं। (यदि आपको एक लिंक फ़ंक्शन (या प्री और पोस्ट लिंक फ़ंक्शंस) की आवश्यकता है, और आपने एक कंपाइल फ़ंक्शन को परिभाषित किया है, तो कंपाइल फ़ंक्शन को लिंक फ़ंक्शन (एस) को वापस करना होगा क्योंकि विशेषता को परिभाषित किए जाने पर 'link'
विशेषता को अनदेखा 'compile'
किया गया है।)
लिंक फंक्शन - सामान्य रूप से श्रोता कॉलबैक (यानी, $watch
स्कोप पर भाव) दर्ज करने के साथ-साथ DOM (यानी, iElement = व्यक्तिगत उदाहरण तत्व का हेरफेर) अपडेट करने के लिए उपयोग करते हैं। टेम्पलेट के क्लोन होने के बाद इसे निष्पादित किया जाता है। जैसे, एक के अंदर <li ng-repeat...>
, लिंक फ़ंक्शन को <li>
उस विशेष <li>
तत्व के लिए टेम्प्लेट (tElement) के बाद क्लोन किया गया है (iElement में) । एक $watch
निर्देश को गुंजाइश संपत्ति परिवर्तन (एक उदाहरण प्रत्येक उदाहरण के साथ जुड़ा हुआ है) को अधिसूचित करने की अनुमति देता है, जो निर्देश को DOM के लिए एक अद्यतन उदाहरण मूल्य प्रदान करने की अनुमति देता है।
नियंत्रक फ़ंक्शन - का उपयोग तब किया जाना चाहिए जब किसी अन्य निर्देश को इस निर्देश के साथ सहभागिता करने की आवश्यकता हो। उदाहरण के लिए, AngularJS के मुख पृष्ठ पर, फलक निर्देश को टैब निर्देश द्वारा बनाए गए दायरे में स्वयं को जोड़ना होगा, इसलिए टैब निर्देश को नियंत्रक विधि (थिंक एपीआई) को परिभाषित करने की आवश्यकता होती है जिसे फलक निर्देश कॉल या एक्सेस कर सकता है।
टैब और फलक निर्देशों की अधिक गहराई से व्याख्या के लिए, और टैब निर्देश अपने नियंत्रक पर एक फ़ंक्शन का उपयोग करके this
(इसके बजाय $scope
) पर एक फ़ंक्शन बनाता है , कृपया AngularJS नियंत्रकों में 'इस' बनाम $ गुंजाइश देखें ।
सामान्य तौर पर, आप $watches
निर्देशों के नियंत्रक या लिंक फ़ंक्शन में विधियों आदि को डाल सकते हैं । नियंत्रक पहले चलेगा, जो कभी-कभी मायने रखता है (यह फ़िडल देखें जो तब लॉग करता है जब सीटीटीएल और लिंक फ़ंक्शन दो नेस्टेड निर्देशों के साथ चलते हैं)। जैसा कि जोश ने एक टिप्पणी में उल्लेख किया है , आप बाकी ढांचे के साथ स्थिरता के लिए एक नियंत्रक के अंदर गुंजाइश-हेरफेर कार्यों को रखना चाह सकते हैं।
mouseover
, दूसरा संपत्ति में बदलाव की गुंजाइश के लिए। बड़ा अंतर।
मार्क के जवाब के पूरक के रूप में, संकलन फ़ंक्शन में स्कोप तक पहुंच नहीं है, लेकिन लिंक फ़ंक्शन करता है।
मैं वास्तव में इस वीडियो की सिफारिश करता हूं; मिसको हेवरी (एंगुलरजेएस के पिता) द्वारा निर्देश लेखन , जहां वह मतभेदों और कुछ तकनीकों का वर्णन करते हैं। ( वीडियो में 14:41 निशान पर संकलन समारोह और लिंक फ़ंक्शन के बीच अंतर )।
कोणीय सम्मेलन: नियंत्रक में व्यापार तर्क और लिंक में डोम हेरफेर लिखें।
इसके अलावा आप एक नियंत्रक फ़ंक्शन को दूसरे निर्देश के लिंक फ़ंक्शन से कॉल कर सकते हैं। उदाहरण के लिए आपके पास 3 कस्टम निर्देश हैं
<animal>
<panther>
<leopard></leopard>
</panther>
</animal>
और आप "तेंदुए" के निर्देश के अंदर से जानवर तक पहुंचना चाहते हैं।
http://egghead.io/lessons/angularjs-directive-communic अंतर-डायरेक्टिव संचार के बारे में जानने के लिए उपयोगी होगा
compile
हमेशा पहले निष्पादित किया जाएगा controller
।
संकलन समारोह -
वाक्य - विन्यास
function compile(tElement, tAttrs, transclude) { ... }
नियंत्रक
पूर्व लिंक
DOM श्रोताओं को पंजीकृत करने के साथ-साथ DOM को अपडेट करने के लिए लिंक फ़ंक्शन जिम्मेदार है। टेम्पलेट के क्लोन होने के बाद इसे निष्पादित किया जाता है। यह वह जगह है जहां अधिकांश निर्देशात्मक तर्क डाले जाएंगे।
आप कंट्रोलर में डोम को angular.element का उपयोग करके अपडेट कर सकते हैं लेकिन यह अनुशंसित नहीं है क्योंकि लिंक फ़ंक्शन में तत्व प्रदान किया गया है
प्री-लिंक फ़ंक्शन का उपयोग तर्क को लागू करने के लिए किया जाता है जो तब चलता है जब कोणीय जेएस ने पहले से ही बाल तत्वों को संकलित किया है, लेकिन इससे पहले कि किसी भी बच्चे के तत्व के पोस्ट लिंक को बुलाया गया हो
बाद लिंक
निर्देश है कि केवल लिंक फ़ंक्शन है, कोणीय फ़ंक्शन को पोस्ट लिंक के रूप में मानता है
संकलित करने के बाद पोस्ट को निष्पादित किया जाएगा, नियंत्रक और पूर्व-लिंक फ़ंक्स्टन, इसलिए यही आपके निर्देश तर्क को जोड़ने के लिए सबसे सुरक्षित और डिफ़ॉल्ट स्थान माना जाता है