यह आम बात है?
हां यह सामान्य प्रथा है, निर्देशों को अक्सर चर के लिए $ स्कोप तक पहुंचने और विधियों को कॉल करने की आवश्यकता होती है (जैसे LoadMoreTweets
)।
भी official docs में वे की तरह उदाहरण है ..
scope.$watch(...)
... एक निर्देश (जहां नियंत्रक देखा चर में परिवर्तन करने जा सकता है) के अंदर FOM।
यह इस तरह से नियंत्रक के साथ संवाद करने के निर्देश के लिए पूरी तरह उपयुक्त है।
आप निर्देश के link
विधि में स्वयं नियंत्रक (न केवल दायरा) इंजेक्ट कर सकते हैं। http://docs.angularjs.org/guide/directive के "लिंकिंग फ़ंक्शन" अनुभाग को देखता है।
"नियंत्रक सभी निर्देशों के बीच साझा किया जाता है, जो निर्देशकों को संचार चैनल के रूप में नियंत्रकों का उपयोग करने की अनुमति देता है।"
लेकिन मैं एक सेवा का उपयोग कर सकता है?
निश्चित रूप से आप कर सकते हैं। सवाल यह है कि क्यों? यदि आप एक पृष्ठ के साथ काम कर रहे हैं (जो उदाहरण के लिए ट्वीट दिखाता है) और नियंत्रक के पास पहले से ही $scope.tweets
वैरिएबल और $scope.loadMoreTweets
विधि है, तो आप वहां पर एक सेवा छड़ी करने की कोशिश करते हैं, जहां आप इसकी आवश्यकता नहीं है, तो आप चीजों को अधिक जटिल बना रहे हैं।
दूसरी ओर सेवा आवेदन विस्तृत डेटा के लिए उपयोगकर्ता प्रोफ़ाइल की तरह परिपूर्ण है। यदि आपके निर्देश को वर्तमान में लॉग इन किए गए उपयोगकर्ता तक पहुंचने की आवश्यकता है, तो यह सेवा के माध्यम से ऐसा करने के लिए बहुत समझदारी है।
डॉक्स से:
कोणीय सेवाओं एकमात्र कि इस तरह के $ http सेवा ब्राउजर के XMLHttpRequest ऑब्जेक्ट के लिए निम्न स्तर पहुँच प्रदान करता है के रूप में वेब क्षुधा के लिए आम विशिष्ट कार्यों, बाहर ले जाने हैं।
यदि आपके पास एक एप्लिकेशन-व्यापी कार्य है जो सिंगलटन के लिए सबसे उपयुक्त है, तो हर तरह से एक सेवा का उपयोग करें। यदि आपको निर्देश से $ दायरे को एक्सेस/संशोधित करने की आवश्यकता है, तो बस नियंत्रक से सीधे बात करें, या उस ईवेंट को ट्रिगर करें जो नियंत्रक प्रतिक्रिया दे सकता है।
यह अनुमान है कि सेवाओं के लिए क्या बहुत कुछ है, मुझे लगता है। बस मेरे दो सेंट ... – fjdumont