क्या शानदार सवाल है! मैं यह सुनना पसंद करूंगा कि दूसरों को क्या कहना है, लेकिन यहां मेरे द्वारा उपयोग किए गए दिशानिर्देश हैं।
उच्च ऊंचाई वाले आधार: गुंजाइश का उपयोग "गोंद" के रूप में किया जाता है जिसका उपयोग हम अभिभावक नियंत्रक, निर्देश और निर्देश टेम्पलेट के बीच संवाद करने के लिए करते हैं।
पैरेंट स्कोप: scope: false
तो कोई नया स्कोप बिल्कुल नहीं
मैं इसे बहुत बार उपयोग नहीं करता, लेकिन जैसा कि @MarkRajcok ने कहा, यदि निर्देश किसी भी गुंजाइश चर का उपयोग नहीं करता है (और स्पष्ट रूप से कोई सेट नहीं करता है!) तो यह ठीक है जहां तक मेरा संबंध है। यह बच्चे के निर्देशों के लिए भी उपयोगी है जो केवल माता-पिता के निर्देश के संदर्भ में उपयोग किए जाते हैं (हालांकि इसमें हमेशा अपवाद हैं) और इसका कोई खाका नहीं है। मूल रूप से टेम्पलेट के साथ कुछ भी एक दायरा साझा नहीं करता है, क्योंकि आप स्वाभाविक रूप से पहुंच और हेरफेर के लिए उस गुंजाइश को उजागर कर रहे हैं (लेकिन मुझे यकीन है कि इस नियम के अपवाद हैं)।
एक उदाहरण के रूप में, मैंने हाल ही में एक निर्देश बनाया है जो एसवीजी लाइब्रेरी मैं लिखने की प्रक्रिया में उपयोग करके एक स्थिर (स्थिर) वेक्टर ग्राफिक बनाता है। यह $observe
दो विशेषताओं ( width
और height
) का उपयोग करता है और अपनी गणना में उन का उपयोग करता है, लेकिन यह न तो कोई दायरा चर निर्धारित करता है और न ही कोई टेम्पलेट पढ़ता है। यह एक और गुंजाइश नहीं बनाने के लिए एक अच्छा उपयोग मामला है; हमें एक की आवश्यकता नहीं है, इसलिए परेशान क्यों हो?
लेकिन एक अन्य एसवीजी निर्देश में, हालांकि, मुझे उपयोग करने के लिए डेटा के एक सेट की आवश्यकता थी और इसके अलावा राज्य का एक छोटा सा स्टोर करना था। इस मामले में, माता-पिता के दायरे का उपयोग करना गैर जिम्मेदाराना होगा (फिर से, आम तौर पर बोलना)। तो इसकी बजाय...
बाल स्कोप: scope: true
एक बाल क्षेत्र के साथ निर्देश संदर्भ-जागरूक हैं और वर्तमान दायरे के साथ बातचीत करने का इरादा है।
जाहिर है, एक अलग दायरे से अधिक का मुख्य लाभ यह है कि उपयोगकर्ता किसी भी विशेषता पर प्रक्षेप का उपयोग करने के लिए स्वतंत्र है जो वे चाहते हैं; उदाहरण class="item-type-{{item.type}}"
के लिए एक अलग दायरे के साथ एक निर्देश पर उपयोग करना डिफ़ॉल्ट रूप से काम नहीं करेगा, लेकिन एक बच्चे के दायरे के साथ एक पर ठीक काम करता है क्योंकि जो भी प्रक्षेपित होता है वह अभी भी डिफ़ॉल्ट रूप से मूल दायरे में पाया जा सकता है। साथ ही, निर्देश स्वयं माता-पिता को नुकसान या प्रदूषण के बारे में चिंता किए बिना अपने स्वयं के दायरे के संदर्भ में विशेषताओं और अभिव्यक्तियों का सुरक्षित रूप से मूल्यांकन कर सकता है।
उदाहरण के लिए, एक टूलटिप एक ऐसी चीज है जो बस जुड़ जाती है; एक अलग दायरा काम नहीं करेगा (डिफ़ॉल्ट रूप से, नीचे देखें) क्योंकि यह उम्मीद है कि हम यहां अन्य निर्देशों या प्रक्षेपित विशेषताओं का उपयोग करेंगे। टूलटिप सिर्फ एक वृद्धि है। लेकिन टूलटिप को उप-निर्देश और / या टेम्पलेट के साथ उपयोग करने के लिए गुंजाइश पर कुछ चीजें निर्धारित करने की आवश्यकता होती है और जाहिर है कि यह अपने स्वयं के राज्य का प्रबंधन करने के लिए है, इसलिए यह वास्तव में मूल गुंजाइश का उपयोग करने के लिए काफी बुरा होगा। हम या तो इसे प्रदूषित कर रहे हैं या इसे नुकसान पहुंचा रहे हैं, और न ही बीनो है।
मैं अपने आप को अलग-अलग या माता-पिता के scopes से अधिक बार बाल scopes का उपयोग कर पाते हैं।
अलग गुंजाइश: scope: {}
यह पुन: प्रयोज्य घटकों के लिए है। :-)
लेकिन गंभीरता से, मैं "पुन: प्रयोज्य घटकों" को "स्व-निहित घटकों" के रूप में मानता हूं। आशय यह है कि उनका उपयोग किसी विशिष्ट उद्देश्य के लिए किया जाना है, इसलिए उन्हें अन्य निर्देशों के साथ मिलाकर या DOM नोड में अन्य प्रक्षेपित विशेषताओं को जोड़कर स्वाभाविक रूप से कोई मतलब नहीं है।
अधिक विशिष्ट होने के लिए, इस स्टैंडअलोन कार्यक्षमता के लिए कुछ भी आवश्यक है, माता-पिता के दायरे के संदर्भ में मूल्यांकन की गई निर्दिष्ट विशेषताओं के माध्यम से प्रदान किया जाता है; वे या तो एक-तरफ़ा तार ('@'), एक-तरफ़ा भाव ('और'), या दो-तरफ़ा चर बाइंडिंग ('=') हैं।
स्व-निहित घटकों पर, अन्य निर्देशों या विशेषताओं को लागू करने की आवश्यकता समझ में नहीं आती क्योंकि यह स्वयं मौजूद है। इसकी शैली अपने स्वयं के टेम्पलेट द्वारा शासित होती है (यदि आवश्यक हो) और उपयुक्त सामग्री को स्थानांतरित किया जा सकता है (यदि आवश्यक हो)। यह स्टैंडअलोन है, इसलिए हमने इसे एक अलग दायरे में रखने के लिए भी कहा: "इसके साथ गड़बड़ न करें। मैं आपको इन कुछ विशेषताओं के माध्यम से परिभाषित एपीआई दे रहा हूं।"
एक अच्छा सर्वोत्तम अभ्यास जितना संभव हो उतना निर्देश लिंक और नियंत्रक कार्यों से अधिक टेम्पलेट-आधारित सामान को बाहर करना है। यह एक और "एपीआई-जैसा" कॉन्फ़िगरेशन बिंदु प्रदान करता है: निर्देश का उपयोगकर्ता बस टेम्पलेट को बदल सकता है! कार्यक्षमता सभी एक ही रही, और इसके आंतरिक एपीआई को कभी नहीं छुआ गया, लेकिन हम स्टाइल और डीओएम कार्यान्वयन के साथ गड़बड़ कर सकते हैं जितनी आवश्यकता हो। ui / बूटस्ट्रैप इस बात का एक बेहतरीन उदाहरण है कि यह कैसे किया जाए क्योंकि पीटर और पावेल कमाल के हैं।
आइसोलेट स्कोप भी ट्रांसकॉक्शन के साथ उपयोग के लिए महान हैं। टैब ले लो; वे न केवल पूरी कार्यक्षमता हैं, लेकिन जो कुछ भी इसके अंदर है उसका मूल्यांकन माता-पिता के दायरे से स्वतंत्र रूप से किया जा सकता है, जबकि टैब (और पैन) को छोड़ कर वे जो चाहें कर सकते हैं। टैब में स्पष्ट रूप से अपना राज्य होता है , जो दायरे (टेम्पलेट के साथ बातचीत करने के लिए) पर होता है, लेकिन उस स्थिति का उस संदर्भ से कोई लेना-देना नहीं है जिसमें इसका उपयोग किया गया था - यह पूरी तरह से आंतरिक है जो टैब निर्देश को टैब निर्देश बनाता है। इसके अलावा, यह टैब के साथ किसी भी अन्य निर्देशों का उपयोग करने के लिए बहुत मायने नहीं रखता है। वे टैब हैं - और हमें पहले से ही वह कार्यक्षमता मिली है!
इसे अधिक कार्यक्षमता या अधिक कार्यक्षमता के साथ घेरें, लेकिन निर्देश यह है कि यह पहले से ही है।
सभी ने कहा, मुझे ध्यान देना चाहिए कि एक अलग दायरे की कुछ सीमाओं (यानी सुविधाओं) के आसपास तरीके हैं, जैसा कि @ProLoser ने अपने जवाब में संकेत दिया था। उदाहरण के लिए, चाइल्ड स्कोप सेक्शन में, मैंने आइसोलेटेड स्कोप (डिफॉल्ट रूप से) का उपयोग करते समय नॉन-डायरेक्टिव विशेषताओं को तोड़ने पर इंटरपोलेशन का उल्लेख किया। लेकिन उपयोगकर्ता, उदाहरण के लिए, बस उपयोग कर सकता है class="item-type-{{$parent.item.type}}"
और यह एक बार फिर काम करेगा। इसलिए अगर बच्चे के दायरे में एक अलग दायरे का उपयोग करने के लिए एक सम्मोहक कारण है, लेकिन आप इन सीमाओं में से कुछ के बारे में चिंतित हैं, तो जान लें कि यदि आप की जरूरत है तो आप उन सभी के आसपास काम कर सकते हैं।
सारांश
बिना किसी नए दायरे के निर्देश केवल-पढ़ने के लिए हैं; वे पूरी तरह से विश्वसनीय हैं (यानी ऐप में आंतरिक) और वे जैक को नहीं छूते हैं। चाइल्ड स्कोप वाले निर्देश कार्यक्षमता जोड़ते हैं, लेकिन वे केवल कार्यक्षमता नहीं हैं । अंत में, अलग-अलग स्कोप उन निर्देशों के लिए हैं जो संपूर्ण लक्ष्य हैं; वे स्टैंडअलोन हैं, इसलिए उन्हें ठीक करने के लिए ठीक है (और सबसे "सही")।
मैं अपने शुरुआती विचारों को बाहर निकालना चाहता था, लेकिन जैसा कि मैं अधिक चीजों के बारे में सोचता हूं, मैं इसे अपडेट करूंगा। लेकिन पवित्र बकवास - यह एक एसओ उत्तर के लिए लंबा है ...
पुनश्च: पूरी तरह से मूर्त, लेकिन जब से हम scopes के बारे में बात कर रहे हैं, मैं "प्रोटोटाइप" कहना पसंद करता हूं, जबकि अन्य "प्रोटोटाइप" पसंद करते हैं, जो अधिक सटीक लगता है लेकिन सिर्फ जीभ को अच्छी तरह से रोल नहीं करता है। :-)