[javascript] कोणीय जेएस: निर्देशक के लिंक फ़ंक्शन की आवश्यकता क्या है जब हमारे पास पहले से ही निर्देशक का नियंत्रक था?



Answers

नियंत्रकों की आवश्यकता क्यों है

link और controller बीच का अंतर तब खेलता है जब आप अपने डीओएम में निर्देशों को घोंसला करना चाहते हैं और माता-पिता निर्देशों से नेस्टेड कार्यों में एपीआई फ़ंक्शंस का पर्दाफाश करना चाहते हैं।

docs :

सर्वोत्तम अभ्यास: जब आप किसी अन्य एपीआई को एपीआई का पर्दाफाश करना चाहते हैं तो नियंत्रक का उपयोग करें। अन्यथा लिंक का उपयोग करें।

मान लें कि आप my-form निर्देश और my-text-input दो निर्देश प्राप्त करना चाहते हैं और आप my-text-input निर्देश को केवल my-form अंदर दिखने के लिए चाहते हैं और कहीं और नहीं।

उस स्थिति में, आप my-text-input निर्देश को परिभाषित करते समय कहेंगे कि इसके लिए require तर्क का उपयोग करके parent डीओएम तत्व से नियंत्रक की require है , इस प्रकार: require: '^myForm' । अब मूल तत्व से नियंत्रक link फ़ंक्शन में चौथे तर्क के रूप में injected दिया जाएगा, $scope, element, attributes । आप उस नियंत्रक पर फ़ंक्शन कॉल कर सकते हैं और माता-पिता निर्देश के साथ संवाद कर सकते हैं।

इसके अलावा, अगर ऐसा नियंत्रक नहीं मिला है, तो एक त्रुटि उठाई जाएगी।

लिंक का उपयोग क्यों करें

controller पर $scope उपलब्ध होने के बाद से controller को परिभाषित करने पर link फ़ंक्शन का उपयोग करने की कोई वास्तविक आवश्यकता नहीं है। इसके अलावा, दोनों link और controller को परिभाषित करते समय, किसी को दो के आवेषण के आदेश के बारे में सावधान रहने की आवश्यकता होती है ( controller पहले निष्पादित controller जाता है)।

हालांकि, कोणीय तरीके को ध्यान में रखते हुए, अधिकांश डीओएम हेरफेर और 2-रास्ता बाध्यकारी $watchers का उपयोग आमतौर पर link फ़ंक्शन में किया जाता है जबकि बच्चों के लिए एपीआई और $scope हेरफेर controller में किया controller । यह एक कठिन और तेज़ नियम नहीं है, लेकिन ऐसा करने से कोड अधिक मॉड्यूलर बन जाएगा और चिंताओं को अलग करने में मदद मिलेगी (नियंत्रक directive राज्य बनाए रखेगा और link फ़ंक्शन DOM + बाहरी बाइंडिंग को बनाए रखेगा)।

Question

मुझे दायरे और टेम्पलेट पर कुछ संचालन करने की जरूरत है। ऐसा लगता है कि मैं इसे link फ़ंक्शन या controller फ़ंक्शन में कर सकता हूं (क्योंकि दोनों के पास दायरे तक पहुंच है)।

यह तब होता है जब मुझे link फ़ंक्शन का उपयोग करना होता है, न कि नियंत्रक?

angular.module('myApp').directive('abc', function($timeout) {
    return {
        restrict: 'EA',
        replace: true,
        transclude: true,
        scope: true,
        link: function(scope, elem, attr) { /* link function */ },
        controller: function($scope, $element) { /* controller function */ }
    };
}

साथ ही, मैं समझता हूं कि link गैर-कोणीय दुनिया है। तो, मैं $watch , $digest और $apply उपयोग कर सकते हैं।

link फ़ंक्शन का महत्व क्या है, जब हमारे पास पहले से ही नियंत्रक था?




Links