मुझे आश्चर्य है कि आपके पास निर्देश कोड का उदाहरण है जो $routeChangeError
पर कोणीय घटनाओं पर प्रतिक्रिया करता है, जिसमें $rootScope
इंजेक्शन किए बिना (लिंक फ़ंक्शन में $on
का उपयोग करने के लिए)। यह मेरी राय में एमवी * पैटर्न और "उत्पादन" गंध-कोड में टूट जाता है (निर्देश में रूट स्कोप में हेरफेर करने की संभावना देता है)। अग्रिम में धन्यवाद।रूट रूट इंजेक्शन के बिना निर्देश में कोणीय घटनाओं पर प्रतिक्रिया करना
उत्तर
यदि आप केवल ईवेंट सुन रहे हैं, तो आपको $rootScope
का उपयोग करने की आवश्यकता नहीं है; उदाहरण के लिए निर्देशक या लिंक फ़ंक्शन से निर्देश के दायरे पर $scope.$on("$routeChangeError")
।
आप "$routeChangeError"
को $rootScope
से प्रसारित करते हैं, इसलिए सभी बच्चों को यह प्राप्त होता है।
नहीं। $scope
पर किसी प्रकार की पहुंच के बिना कोणीय घटनाओं को सुनने का कोई तरीका नहीं है। यह उन कारणों में से एक है जिनके पास $rootScope
सेवा है, ताकि आप किसी सेवा या किसी अन्य मॉड्यूल में $scope
तक पहुंच प्राप्त कर सकें।
हालांकि, निर्देश में, आपको $rootScope
इंजेक्ट करने की आवश्यकता नहीं है क्योंकि आपके पास लिंकिंग फ़ंक्शन में निर्देश में पहले से ही एक अलग दायरा है।
उदाहरण के लिए:
.directive('myDirective', function(){
return {
restrict: 'A',
link: function(scope, elem, attrs){
scope.$on('some-event', function(e){
// respond to event here
});
}
};
});
आपका scope
चर एक "अलग" गुंजाइश तो यह किसी भी तरह से अपनी मूल गुंजाइश को प्रभावित नहीं कर सकते हैं। हालांकि, अगर आप कुछ बहन-स्तर मॉड्यूल में किसी ईवेंट को उत्सर्जित करने का प्रयास कर रहे हैं, तो इसमें कुछ अजीब साइड इफेक्ट्स हैं, क्योंकि एपुलर इवेंट्स केवल $emit
ऊपर या $broadcast
दायरे पदानुक्रम के माध्यम से नीचे की ओर हैं। यदि आप नहीं हैं, तो उपर्युक्त उदाहरण पूरी तरह से काम करना चाहिए।
.directive('myDirective', function($rootScope){
var isolateScope = $rootScope.new(); // creates a new isolate copy of $rootScope
return {
restrict: 'A',
link: function(scope, elem, attrs){
isolateScope.$on('some-event', function(e){
// respond to event here
});
}
};
});
यह इतना है कि कोई भी परिवर्तन आपके द्वारा इसमें अन्य मॉड्यूल या सेवाएं प्रभावित नहीं होंगी $rootScope
की एक ऐसी ही अलग प्रतिलिपि बना देगा: यदि आप हैं, तो निम्न उदाहरण एक तरह से यह करने के लिए है। यह "smell-code"
के साथ किसी भी समस्या को रोक देगा जैसा आपने इसे कहा था।
$on
विधि आंतरिक Scope.prototype
पर परिभाषित किया गया है, और इसका मतलब है इस के बाद से कोणीय में प्रत्येक गुंजाइश Scope
निर्माता से बनाई गई है प्रत्येक गुंजाइश एक $on
विधि पर ही उपलब्ध है। $rootScope
इंजेक्षन की कोई जरूरत नहीं है, बस समारोह की गुंजाइश सीधे जोड़ने के निर्देश पर $on
विधि कॉल:
app.directive('myDirective', function(){
return function(scope, element, attrs){
scope.$on('$routeChangeError', function(){
// ...
});
}
});
- 1. रूट निर्देश पर कोणीय 2 इनपुट पैरामीटर
- 2. कोणीय 2 रूट रूट पर नेविगेट करें "/"
- 3. रूट के बिना जेकिल स्थापित करना
- 4. रूट के बिना पायथन 2.7 इंस्टॉल करना
- 5. रूट एनीमेशन कोणीय 4
- 6. कोणीय 4: रूट नेविगेशन
- 7. रूट के बिना जीएचसी इंस्टॉल
- 8. रूट एडीबी रूट के बिना एप्लिकेशन डेटाबेस तक पहुंच
- 9. कोणीय/MEAN.io में सुरक्षा दोष को रूट करना?
- 10. कोणीय 2 रूट पैराम सत्यापन
- 11. कोणीय निर्देश निर्भरता इंजेक्शन - टाइपस्क्रिप्ट
- 12. रूट
- 13. Invariant उल्लंघन: रूट रूट को प्रतिक्रिया-राउटर 2 गतिशील रूटिंग
- 14. JAX-RS - JSON रूट नोड के बिना
- 15. गिट रूट रूट
- 16. उसी रूट रूट
- 17. xampp दस्तावेज़ रूट रूट
- 18. सोलरिस पर, रूट
- 19. रूट
- 20. कोणीय 2: '...' के लिए रूट जेनरेटर
- 21. रूट
- 22. क्या रूट निजीकरण के बिना मोंगोड स्थापित करना संभव है?
- 23. मैं $ रूट और $ रूट पैराम्स के साथ कोणीय जेएस में यूआरएल कैसे अपडेट करूं?
- 24. प्रतिक्रिया-राउटर रूट परम सुरक्षा पर सुरक्षा टाइप करें?
- 25. रेल में मॉडल के बिना नियंत्रक के लिए रूट 3
- 26. रूट अनुमति के बिना लिनक्स कच्चे इनपुट?
- 27. रूट
- 28. रूट
- 29. लिनक्स में जावा - रूट और गैर-रूट
- 30. रूट
यह मतलब यह है कि समाधान अपने ट्यूटोरियल http://egghead.io/lessons/angularjs- में जॉन Lindquist द्वारा दिखाए निर्देश-मार्ग-हैंडलिंग बस ** खराब डिज़ाइन किया गया है ** (_ कोणीय जेएस $ रूटस्कोप मार्ग परिवर्तन त्रुटियों का पता लगाने और इसे उपयोगकर्ता_ पर प्रदर्शित करने के निर्देश के भीतर उपयोग करें)? असल में यह वीडियो मेरे प्रश्न का ट्रिगर था। –