AngularJS: ngInclude बनाम निर्देश


93

मुझे यह समझ में नहीं आता है कि कब एक निर्देश का उपयोग करना है और कब नगण्य का उपयोग करना अधिक उचित होगा। इस उदाहरण को लें: मेरे पास एक आंशिक है,password-and-confirm-input-fields.html , जो कि एक पासवर्ड दर्ज करने और पुष्टि करने के लिए html है। मैं इसका उपयोग साइनअप-पेज और परिवर्तन-पासवर्ड-पृष्ठ के तहत दोनों करता हूं। उन दो पृष्ठों में प्रत्येक नियंत्रक है, आंशिक HTML में कोई समर्पित नियंत्रक नहीं है।

क्या मुझे निर्देशन का उपयोग करना चाहिए या इसके ngIncludeलिए?


मैं हर बार एक निर्देश के साथ जाता हूं, लेकिन मैं उत्सुक हूं कि अधिक अनुभवी कोणीय लोग क्या कहेंगे।
ऑस्टिन मुलिंस

1
यदि यह वास्तव में एक स्वतंत्र घटक है, तो इसे संभवतः अपने स्वयं के नियंत्रक से जुड़ा होना चाहिए। IMO, मैं एक आंशिक का उपयोग करूँगा - लेकिन, मैं कुछ और इनपुट के लिए उत्सुक हूँ
tymeJV

4
यदि उस आंशिक के लिए कोई js कोड आवश्यक है, तो एक निर्देश का उपयोग करें। यदि यह सिर्फ HTML है, तो ngInclude का उपयोग करें।
डेनियल बेक

जवाबों:


122

यह सब इस बात पर निर्भर करता है कि आप अपने कोड के टुकड़े से क्या चाहते हैं। व्यक्तिगत रूप से, यदि कोड में कोई तर्क नहीं है, या नियंत्रक की भी आवश्यकता नहीं है, तो मैं जाता हूं ngInclude। मैं आम तौर पर बड़े "स्थिर" html टुकड़े डालता हूं जो मैं यहां देखने में अव्यवस्था नहीं चाहता हूं। (यानी: मान लीजिए कि एक बड़ी तालिका जिसका डेटा वैसे भी माता-पिता नियंत्रक से आता है<div ng-include="bigtable.html" /> उन सभी लाइनों की तुलना में दृश्य को अव्यवस्थित कर रहे हैं)

यदि तर्क, DOM हेरफेर है, या आपको इसका उपयोग करने के लिए अलग-अलग उदाहरणों में अनुकूलन (उर्फ अलग तरीके से प्रस्तुत करना) की आवश्यकता है, तो directivesबेहतर विकल्प हैं (वे पहली बार में चुनौतीपूर्ण हैं, लेकिन वे बहुत शक्तिशाली हैं, इसे समय दें) ।

ngInclude

कभी-कभी आप देखेंगे ngInclude'sकि उनके बाहरी $scope/ से प्रभावित हैं interface। जैसे कि एक बड़ा / जटिल रिपीटर कहता है। ये 2 इंटरफेस इस वजह से एक साथ बंधे हैं। यदि मुख्य $scopeपरिवर्तनों में कुछ है , तो आपको अपने शामिल आंशिक के भीतर अपने तर्क को बदलना / बदलना होगा।

निर्देशों

दूसरी ओर, निर्देश कर सकते हैं स्पष्ट स्कोप / नियंत्रक / आदि तो है आप एक परिदृश्य आप पुन: उपयोग के कुछ कई बार होगा जहां की सोच रहे हैं, तो आप देख सकते हैं कि कैसे अपने स्वयं के दायरे जीवन को आसान और कम होगा जुड़े होने भ्रामक।

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

युक्ति: सुनिश्चित करें कि यदि आप IE8 की परवाह नहीं करते हैं, तो प्रतिबंधित का उपयोग करें: 'E'! इसके आसपास तरीके हैं, लेकिन वे कष्टप्रद हैं। बस जीवन को आसान बनाएं और विशेषता / आदि के साथ रहें।<div my-directive />

अवयव [अद्यतन 3/1/2016]

कोणीय 1.5 में जोड़ा गया, यह अनिवार्य रूप से एक आवरण है .directve() । अधिकांश समय घटक का उपयोग किया जाना चाहिए। यह बहुत सारी बॉयलरप्लेट डायरेक्टिव कोड को हटा देता है, जैसे चीजों को डिफॉल्ट करके restrict: 'E', scope : {}, bindToController: true। मैं अत्यधिक आसानी से Angular2 में संक्रमण करने में सक्षम होने के लिए, अपने ऐप में लगभग हर चीज के लिए इनका उपयोग करने की सलाह देता हूं।

निष्कर्ष के तौर पर:

आपको कंपोनेंट और डायरेक्शन बनाने चाहिए अधिकांश समय ।

  • अधिक विस्तार योग्य
  • आप टेम्पलेट और अपनी फ़ाइल को बाह्य रूप से कर सकते हैं (जैसे ngInclude)
  • आप पेरेंट स्कोप का उपयोग करना चुन सकते हैं, या यह स्वयं अलग है निर्देश के भीतर इसका दायरा है।
  • अपने पूरे आवेदन में बेहतर उपयोग करें


अपडेट 3/1/2016

अब जब एंगुलर 2 धीरे-धीरे खत्म हो रहा है, और हम जानते हैं कि सामान्य प्रारूप (निश्चित रूप से अभी भी यहां और वहां कुछ बदलाव होंगे) बस यह जोड़ना चाहते थे कि यह करना कितना महत्वपूर्ण है components(कभी-कभी निर्देश अगर आपको उन्हें प्रतिबंधित करने की आवश्यकता है: ' ई 'उदाहरण के लिए)।

घटक कोणीय 2 के समान हैं @Component। इस तरह हम एक ही क्षेत्र में तर्क और html को एनकैप्सुलेट कर रहे हैं।


सुनिश्चित करें कि आप घटकों में जितनी चीज़ों को शामिल कर सकते हैं, यह उतना ही आसान हो जाता है कि इससे कोणीय 2 में संक्रमण आसान हो जाएगा! (यदि आप संक्रमण करने के लिए चुनते हैं)

इस माइग्रेशन प्रक्रिया का उपयोग करते हुए एक अच्छा लेख यहां दिया गया है directives(यदि आप पाठ्यक्रम के घटकों का उपयोग करने जा रहे हैं तो बहुत समान हैं): http://angular-tips.com/blog/2015/09/migrating-directives-to-angular-2/


5
मैं इस जवाब से सहमत हूं। निर्देशों के लिए सीखने की अवस्था खड़ी है, लेकिन इसे प्राप्त करने के बाद यह वास्तव में बंद हो जाता है।
जैज़ी

@mcpDESIGNS, एक मामला जो शायद इस उत्तर को पूरी तरह से फिट नहीं करता है (कम से कम दो पहले पैराग्राफ नहीं)। यदि मेरे पास अपने स्वयं के नियंत्रक के साथ एक नौसेना-आंशिक है, और मैं केवल एक बार (index.html-file में) इसका उपयोग करूंगा, तो यह संभवतः एक आंशिक होना चाहिए और निर्देश नहीं होना चाहिए क्योंकि यह केवल एक बार उपयोग किया जाता है (यह इस अर्थ में एक अलग ऐप की तरह कि इसे ngview के एक भाग के रूप में शामिल नहीं किया गया है), भले ही उसका अपना तर्क हो। या?
एरिक

यह अभी भी भ्रामक है .. आप ngInclude का उपयोग करते समय एक नियंत्रक भी निर्दिष्ट कर सकते हैं, इसे देखें: stackoverflow.com/questions/13811948/…
Marwen Trabelsi

1
बेशक, लेकिन यह हमेशा किसी तरह से मूल नियंत्रक से जुड़ा होता है। जहां एक निर्देश टेम्पलेट के लोड होने पर अपने भीतर एक नियंत्रक बना सकता है। यह पूरी तरह से अलग हो सकता है (यदि आप चाहते हैं)
मार्क पिज़्ज़क - ट्रिलोन.आईओ

1
सबसे अच्छी बात जो आप कर सकते हैं वह इस अवधारणा को एक कारखाने या कुछ में अमूर्त है, इस तरह से आप इसे केवल एक linkफ़ंक्शन और वॉइला के भीतर से कॉल कर सकते हैं ! यह बिना किसी संदेह के निर्देशन में अच्छा बेक किया जाएगा :( @ अर्विन
मार्क पाइज़्ज़ाक - ट्रिलोन
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.