AngularJS Directive बनाम Service बनाम नियंत्रक


15

मैं अपनी कंपनियों की आंतरिक वेबसाइट पर एक परिवर्तन अनुरोध को लागू करना शुरू करने वाला हूं, जो कुछ दिशानिर्देशों से मेल खाने पर खेतों की एक गुच्छा की जांच करेगा और उन्हें उजागर करेगा। उदाहरण के लिए, यदि आज जन्म की तारीख है, तो उस क्षेत्र को रेखांकित किया जाएगा और टूलटिप कहेंगे "उन्हें जन्मदिन की शुभकामनाएं!"।

शेष पृष्ठ को पूरा करने के बाद चश्मा इसे लोड करने के लिए कहता है, इसलिए यह लोड समय नहीं बढ़ाएगा। चूंकि मैं कोणीयजेएस के लिए नया हूं, इसलिए मुझे ऐसा करने के 'उचित' तरीकों पर यकीन नहीं है।

मुद्दे:

चूंकि इसमें सीमाएं और छवियां और शीर्षक विशेषताएँ (DOM मैनिपुलेशन) शामिल हैं, ऐसा लगता है कि मुझे एक निर्देश का उपयोग करना चाहिए।

हालाँकि, यह पुन: प्रयोज्य या 'छोटा' नहीं होगा जैसे कि अधिकांश निर्देश प्रतीत होते हैं।

मेरे द्वारा चेक किए गए डेटा का आधा पेज लोड पर मूल कॉल में वापस आ जाएगा, इसलिए मैं इसे सहेजना चाहूंगा और इसे प्राप्त करने के लिए एक और कॉल को बर्बाद नहीं करना चाहूंगा, जिससे मुझे लगता है कि सेवा उस सभी डेटा को संग्रहीत करने के लिए अच्छा होगा।

मुझे पता है कि नियंत्रक में यह सब कैसे करना है, लेकिन यह बहुत बुरा कोड है: पी

सबसे अच्छा तरीका यह किया जा सकता है पर कोई विचार? मूल रूप से, मुझे सभी डेटा की जांच करने के लिए http कॉल की आवश्यकता होगी, जो प्रत्येक प्रकार के 'कॉल आउट' के लिए एक बूल मान के साथ एक वस्तु लौटाएगा। फिर मैं इस सूची के माध्यम से चलूंगा और यदि मूल्य सही है, तो एक सीमा, छवि और टूलटिप पाठ जोड़ें।

मुझे यकीन नहीं है कि यह प्रश्न पर्याप्त रूप से स्पष्ट है, इसलिए यदि आप चाहते हैं कि मैं कुछ विवरण जोड़ूं, तो कृपया पूछें। धन्यवाद!


1
आपको 3 में से केवल 1 का उपयोग क्यों करना है? मुझे लगता है कि कम से कम निर्देशों और सेवा / नियंत्रक के संयोजन की तरह यहां सबसे अच्छा होगा।
पीट

एक संयोजन भी ठीक है, मैं सिर्फ इस बात पर उलझन में हूं कि यह कैसे काम करना चाहिए।
बोबो

क्षमा करें, यह टिप्पणियों में है, उचित उत्तर के लिए समय नहीं है। डेटा बनाने के लिए आपकी कॉल शायद किसी सेवा में जाएगी। उस सेवा को आपके नियंत्रक में इंजेक्ट किया जाना चाहिए। यदि आपको उस डेटा के लिए किसी भी तर्क को प्रदान करने की आवश्यकता है, तो यह नियंत्रक में जाता है। अंत में, आपके विचार को आपके निर्देशों का उपयोग करना चाहिए जो नियंत्रक में आपके द्वारा बताए गए किसी भी तर्क का उपयोग कर सकते हैं।
पीट

जवाबों:


27

आप सही हैं, खेलने के कई विकल्प हैं।

कोणीय में कुछ नया लिखना शुरू करने के लिए एक नियंत्रक एक अच्छी जगह है। कंट्रोलर को मार्कअप के एक टुकड़े में बांधने से आपको कोणीय की मौजूदा सेवाओं के साथ कोणीय के पहले से ही मौजूद निर्देशों के पुस्तकालय का उपयोग करने की सुविधा मिलती है।

इसके साथ रहने के दौरान बहुत कम समय के बाद, आपको पता चलेगा कि आपके नियंत्रक ने बहुत बड़ा प्राप्त कर लिया है। खैर अब रिफ्लेक्टर का समय है। यहां सामान्य दिशानिर्देश हैं जिनका मैं पालन करता हूं।

  • नियंत्रकों: नियंत्रक $ स्कोप से बंधे मूल्यों / कार्यक्षमता को संलग्न और प्रबंधित करते हैं। अंतत: $ स्कोप भारी प्रस्तुति से प्रेरित होता है । IE अपने एक दृश्य मॉडल।
  • सेवाएँ: सेवाएँ अवसंरचना, बैकएंड या अन्य ब्राउज़र सुविधाओं में बाँधती हैं
  • निर्देश: निर्देश आपको DOM इवेंट / कार्यक्षमता के साथ एकीकृत करने की अनुमति देता है जो मौजूदा संचालकों द्वारा नियंत्रित नहीं किया जाता है।

इसलिए आप कोड को तीन दिशाओं में से एक में धकेलना चाहेंगे:

  1. मेरे नियंत्रक से कोड वास्तव में तार्किक रूप से प्रस्तुति डेटा / तर्क का एक और टुकड़ा है और इसे अन्य नियंत्रक में विभाजित किया जाना चाहिए । $ गुंजाइश पर वस्तुओं के साथ काम करते समय ध्यान दें, भागों को अलग करने के लिए सबसे अच्छा है कि प्रत्येक नियंत्रक $ गुंजाइश पर अपनी स्वयं की वस्तुओं के लिए जिम्मेदार है। उदाहरण के लिए $ गुंजाइश.क्रेडिटकार्ड। [Blah] एक कंट्रोलर बनाम $ स्कोप.बिलिंगअड्रेस। [Blah] दूसरे कंट्रोलर के लिए। यह $ दायरे पर कोणीय विरासत के कोणीय उपयोग के साथ मुद्दों को रोकने में मदद करता है।

  2. मेरे कंट्रोलर से कोड एप्लिकेशन इन्फ्रास्ट्रक्चर या यूटिलिटी कोड का एक टुकड़ा है, जिसे ऐप के माध्यम से साझा करने की आवश्यकता हो सकती है, और इसे एक सेवा में विभाजित किया जाना चाहिए

  3. मेरे नियंत्रक से कोड प्रस्तुति / DOM संगठन के साथ बहुत अधिक चिंतित है, और इसलिए इसे अपने स्वयं के निर्देश में विभाजित किया जाना चाहिए

1. का उदाहरण शेष भुगतान फॉर्म से अलग क्रेडिट कार्ड में प्रवेश / सत्यापन को संभालने के लिए हो सकता है। आपके पास उपयोगकर्ताओं को इनपुट पते देने के लिए तर्क से अलग नियंत्रक में क्रेडिट कार्ड लॉजिक का एक गुच्छा होगा, इसलिए वे तार्किक रूप से अलग नियंत्रक होंगे।

भुगतान को स्वीकार / अस्वीकार करने के लिए क्रेडिट कार्ड बैकएंड सेवा के साथ संचार करने वाले भाग को स्थानांतरित करने के लिए 2 का एक उदाहरण हो सकता है। या एक अन्य उदाहरण एक मॉड्यूल हो सकता है जो उपयोगकर्ता निर्माण एपीआई को संभालने के लिए बैकएंड से बात करता है।

3 का उदाहरण कुछ प्रकार के ऑटो-टैब की कार्यक्षमता बनाने के लिए हो सकता है जो क्रेडिट कार्ड के लिए 4 नंबर दर्ज किए जाने के बाद कर्सर को 4 संपादन बक्से के बीच ले जाता है।

तदनुसार अपने एप्लिकेशन को विभाजित करें।


इससे मुझे कोणीय के बारे में अधिक समझने में मदद मिली। बहुत बहुत धन्यवाद :)
Bobo
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.