निर्देशों के बीच संवाद स्थापित करने के कुछ तरीके प्रतीत होते हैं। कहते हैं कि आपके पास नेस्टेड निर्देश हैं, जहां आंतरिक निर्देशों को बाहरी से कुछ संवाद करना होगा (जैसे यह उपयोगकर्ता द्वारा चुना गया है)।
<outer>
<inner></inner>
<inner></inner>
</outer>
अब तक मेरे पास ऐसा करने के 5 तरीके हैं
require:
माता-पिता का निर्देश
inner
निर्देश की आवश्यकता होती है सकते हैं outer
के निर्देश है, जो अपने नियंत्रक पर कुछ विधि का पर्दाफाश कर सकते हैं। तो inner
परिभाषा में
require: '^outer',
link: function(scope, iElement, iAttrs, outerController) {
// This can be passed to ng-click in the template
$scope.chosen = function() {
outerController.chosen(something);
}
}
और outer
निर्देशक के नियंत्रक में:
controller: function($scope) {
this.chosen = function(something) {
}
}
$emit
प्रतिस्पर्धा
inner
निर्देश कर सकते हैं $emit
एक घटना है, जो outer
निर्देश का जवाब कर सकते हैं के माध्यम से, $on
। तो inner
निर्देशक के नियंत्रक में:
controller: function($scope) {
$scope.chosen = function() {
$scope.$emit('inner::chosen', something);
}
}
और outer
निर्देशक नियंत्रक में:
controller: function($scope) {
$scope.$on('inner::chosen, function(e, data) {
}
}
पैरेंट स्कोप में एक्साइट्यूट एक्सप्रेशन &
आइटम पैरेंट स्कोप में किसी एक्सप्रेशन के लिए बाध्य हो सकता है, और उसे एक उपयुक्त बिंदु पर निष्पादित कर सकता है। HTML ऐसा होगा:
<outer>
<inner inner-choose="functionOnOuter(item)"></inner>
<inner inner-choose="functionOnOuter(item)"></inner>
</outer>
इसलिए inner
कंट्रोलर में एक 'इनरचोज़' फंक्शन होता है जिसे वह कॉल कर सकता है
scope: {
'innerChoose': '&'
},
controller: function() {
$scope.click = function() {
$scope.innerChoose({item:something});
}
}
जो (इस मामले में) outer
निर्देश के दायरे पर 'functionOnOuter' फ़ंक्शन को कॉल करेगा :
controller: function($scope) {
$scope.functionOnOuter = function(item) {
}
}
गैर-पृथक दायरे पर स्कोप वंशानुक्रम
यह देखते हुए कि ये नेस्टेड कंट्रोलर हैं, स्कोप इनहेरिटेंस काम पर हो सकता है, और इनर डाइरेक्टिव सिर्फ स्कोप चेन में किसी भी फंक्शन को कॉल कर सकता है, जब तक कि इसमें अलग स्कोप न हो)। तो inner
निर्देश में:
// scope: anything but a hash {}
controller: function() {
$scope.click = function() {
$scope.functionOnOuter(something);
}
}
और outer
निर्देशन में:
controller: function($scope) {
$scope.functionOnOuter = function(item) {
}
}
सेवा द्वारा आंतरिक और बाहरी दोनों में इंजेक्ट किया जाता है
एक सेवा को दोनों निर्देशों में इंजेक्ट किया जा सकता है, इसलिए उनके पास एक ही वस्तु तक सीधी पहुंच हो सकती है, या सेवा को सूचित करने के लिए कॉल फ़ंक्शन हो सकते हैं, और शायद पब / सब सिस्टम में भी खुद को अधिसूचित करने के लिए पंजीकृत हो सकते हैं। यह निर्देशों को नेस्टेड होने की आवश्यकता नहीं है।
प्रश्न : दूसरों पर प्रत्येक संभावित कमियां और फायदे क्या हैं?