controllerसमारोह / वस्तु एक अमूर्त मॉडल-दृश्य-नियंत्रक (MVC) का प्रतिनिधित्व करता है। हालांकि एमवीसी के बारे में लिखना कोई नई बात नहीं है, यह अभी भी कोणीय का सबसे महत्वपूर्ण लाभ है: चिंताओं को छोटे टुकड़ों में विभाजित करें। और वह यह,, इसलिए यदि आप पर प्रतिक्रिया करने के लिए की जरूरत है और कुछ नहीं Modelसे आ रही परिवर्तन सही है व्यक्ति कि काम करने के लिए।ViewController
linkफ़ंक्शन के बारे में कहानी अलग है, यह अलग-अलग दृष्टिकोण से आ रही है फिर एमवीसी। और वास्तव में आवश्यक है, एक बार जब हम एक controller/model/view (टेम्पलेट) की सीमाओं को पार करना चाहते हैं ।
चलो '' उन पैमानों से शुरू होते हैं जो linkफंक्शन में पास होते हैं :
function link(scope, element, attrs) {
- गुंजाइश एक कोणीय गुंजाइश वस्तु है।
- तत्व jqLite- लिपटे तत्व है जो इस निर्देशन से मेल खाता है।
- एट्रस सामान्यीकृत विशेषता नामों और उनके संबंधित मूल्यों के साथ एक वस्तु है।
linkसंदर्भ में रखने के लिए , हमें यह उल्लेख करना चाहिए कि सभी निर्देश इस आरंभीकरण प्रक्रिया के चरणों से गुजर रहे हैं: संकलन , लिंक । ब्रैड ग्रीन और श्याम शेषाद्री पुस्तक एंगुलर जेएस से एक उद्धरण :
संकलित चरण (लिंक की एक बहन, स्पष्ट चित्र प्राप्त करने के लिए यहां उल्लेख करें):
इस चरण में, कोणीय टेम्पलेट में सभी पंजीकृत निर्देशों को पहचानने के लिए DOM चलता है। प्रत्येक निर्देश के लिए, यह फिर निर्देश के नियमों (टेम्पलेट, प्रतिस्थापित, ट्रांसक्लूड, और इसी तरह) के आधार पर DOM को रूपांतरित करता है, और यदि यह मौजूद है तो संकलन फ़ंक्शन को कॉल करता है। परिणाम एक संकलित टेम्पलेट फ़ंक्शन है,
लिंक चरण :
दृश्य को गतिशील बनाने के लिए, कोणीय तब प्रत्येक निर्देश के लिए एक लिंक फ़ंक्शन चलाता है। लिंक फ़ंक्शंस आम तौर पर DOM या मॉडल पर श्रोता बनाता है। ये श्रोता हर समय दृश्य और मॉडल को सिंक में रखते हैं।
इसका उपयोग करने का एक अच्छा उदाहरण linkयहां पाया जा सकता है: कस्टम निर्देश बनाना । उदाहरण देखें: एक निर्देश बनाना जो DOM को मैनिपुलेट करता है, जो पेज में "डेट-टाइम" सम्मिलित करता है, हर सेकंड को रीफ्रेश करता है।
ऊपर उस समृद्ध स्रोत से बस एक बहुत छोटा स्निपेट , डोम के साथ वास्तविक हेरफेर दिखा रहा है। $ टाइमआउट सेवा के लिए झुका हुआ कार्य है, और यह भी मेमोरी लीक से बचने के लिए अपने विध्वंसक कॉल में साफ हो जाता है
.directive('myCurrentTime', function($timeout, dateFilter) {
function link(scope, element, attrs) {
...
// the not MVC job must be done
function updateTime() {
element.text(dateFilter(new Date(), format)); // here we are manipulating the DOM
}
function scheduleUpdate() {
// save the timeoutId for canceling
timeoutId = $timeout(function() {
updateTime(); // update DOM
scheduleUpdate(); // schedule the next update
}, 1000);
}
element.on('$destroy', function() {
$timeout.cancel(timeoutId);
});
...
$watch,$digestऔर$apply। "?