मेरे पास एक आइसोलेट-स्कोप वाला निर्देश है (ताकि मैं अन्य स्थानों पर निर्देश का पुन: उपयोग कर सकूं), और जब मैं इस निर्देश का उपयोग करता हूं ng-repeat
, तो यह काम करने में विफल रहता है।
मैंने इस विषय पर सभी दस्तावेज और स्टैक ओवरफ्लो के उत्तर पढ़े हैं और मुद्दों को समझा है। मेरा मानना है कि मैंने सभी सामान्य गोचरों से परहेज किया है।
इसलिए मैं समझता हूं कि ng-repeat
निर्देश द्वारा बनाए गए दायरे के कारण मेरा कोड विफल हो जाता है । मेरा खुद का निर्देश एक अलग-अलग दायरे बनाता है और माता-पिता के दायरे में एक वस्तु के लिए दो-तरफ़ा डेटा-बाइंडिंग करता है। मेरा निर्देशन इस बाध्य चर के लिए एक नया ऑब्जेक्ट-वैल्यू असाइन करेगा और यह पूरी तरह से काम करता है जब मेरा निर्देश बिना उपयोग किया जाता है ng-repeat
(मूल चर सही तरीके से अपडेट किया गया है)। हालाँकि, ng-repeat
असाइनमेंट के ng-repeat
दायरे में एक नया वैरिएबल बनाता है और पैरेंट वैरिएबल में बदलाव नहीं दिखता है। यह सब जैसा मैंने पढ़ा है, उसके आधार पर अपेक्षित है।
मैंने यह भी पढ़ा है कि जब किसी दिए गए तत्व पर कई निर्देश होते हैं, तो केवल एक गुंजाइश बनती है। और उस priority
निर्देश को परिभाषित करने के लिए प्रत्येक निर्देश में सेट किया जा सकता है जिसमें निर्देश लागू होते हैं; निर्देशों को प्राथमिकता से क्रमबद्ध किया जाता है और फिर उनके संकलन कार्यों को कहा जाता है (शब्द प्राथमिकता के लिए खोज http://docs.angularjs.org/guide/directive पर )।
इसलिए मैं उम्मीद कर रहा था कि मैं यह सुनिश्चित करने के लिए प्राथमिकता का उपयोग कर सकता हूं कि मेरा निर्देशन पहले चलता है और एक अलग-अलग दायरे का निर्माण करता है, और जब ng-repeat
रन करता है, तो यह एक गुंजाइश बनाने के बजाय आइसोलेट-स्कोप का फिर से उपयोग करता है जो कि मूल रूप से पेरेंट स्कोप से विरासत में मिला है। ng-repeat
प्रलेखन कहा गया है कि प्राथमिकता स्तर पर है कि निर्देश रन 1000
। यह स्पष्ट नहीं है कि 1
उच्च प्राथमिकता स्तर या निम्न प्राथमिकता स्तर है या नहीं। जब मैंने 1
अपने निर्देशन में प्राथमिकता स्तर का इस्तेमाल किया , तो इससे कोई फर्क नहीं पड़ा, इसलिए मैंने कोशिश की 2000
। लेकिन इससे चीजें बदतर हो जाती हैं: मेरे दो-तरफा बाइंडिंग बन जाते हैं undefined
और मेरा निर्देश कुछ भी प्रदर्शित नहीं करता है।
मैंने अपना मुद्दा दिखाने के लिए एक फील बनाया है । मैंने priority
अपने निर्देशन में सेटिंग पर टिप्पणी की है । मेरे पास नाम ऑब्जेक्ट्स की एक सूची है और एक निर्देश कहा जाता है name-row
जो नाम ऑब्जेक्ट में पहला और अंतिम नाम फ़ील्ड दिखाता है। जब एक प्रदर्शित नाम पर क्लिक किया जाता है, तो मैं चाहता हूं कि यह selected
मुख्य दायरे में एक चर सेट करे । नामों की सरणी, selected
चर को name-row
दो-तरफ़ा डेटा-बाइंडिंग का उपयोग करके निर्देश के पास किया जाता है ।
मुझे पता है कि मुख्य दायरे में कार्यों को कॉल करके इसे कैसे प्राप्त किया जाए। मुझे यह भी पता है कि अगर selected
किसी अन्य वस्तु के अंदर है, और मैं बाहरी वस्तु से बांधता हूं, तो चीजें काम करेंगी। लेकिन मुझे फिलहाल उन समाधानों में कोई दिलचस्पी नहीं है।
इसके बजाय, मेरे पास जो प्रश्न हैं:
- मैं
ng-repeat
एक ऐसा दायरा बनाने से कैसे रोकूँ , जो मूल रूप से मूल दायरे से विरासत में मिला है, और इसके बजाय यह मेरे निर्देशन के अलग-अलग दायरे का उपयोग करता है? 2000
मेरे निर्देशन में प्राथमिकता स्तर काम क्यों नहीं कर रहा है?- बतरंग का उपयोग करना, क्या यह जानना संभव है कि किस प्रकार का दायरा उपयोग में है?
ng-repeat
। मुझे लगता है कि स्टैंडअलोन निर्देशों के साथ मिश्रण करने में सक्षम होना मूल्यवान है ng-repeat
। जारी रखने के लिए ...
ng-repeat
होना चाहिए , तो एक गुंजाइश नहीं होनी चाहिए। ng-repeat
एक गुंजाइश होने से विशिष्ट उपयोग-मामले के लिए समझ में आता है, इसलिए मैं यह सुझाव नहीं दे रहा हूं कि इसे बदल दिया जाए। इसके बजाय, जैसे मैंने एलेक्स ओसबोर्न के जवाब में टिप्पणी की, मुझे लगता है कि मैं एक दोहराव निर्देश बनाऊंगा जो ng-repeat
उस पर आधारित नहीं है जो अपना स्वयं का दायरा नहीं बनाता है। इसके बाद उन निर्देशों को दोहराने के लिए उपयोग किया जा सकता है जिनके अपने अलग-अलग स्कोप हैं। जारी रखने के लिए ...
ng-repeat
या कस्टम स्कोप-कम रिपीट निर्देश। मुझे लगता है कि यह जानने के लिए "कॉलर" के लिए ठीक है, लेकिन एक "कैली" (निर्देश दोहराया जा रहा है) के लिए ठीक नहीं है यह जानने के लिए कि यह दोहराया जा रहा है या नहीं। जारी रखा जाए ...
scope: true
आपके निर्देश का उपयोग करने का सुझाव देता हूं । यह भी देखें (यदि आप पहले से ही नहीं हैं) stackoverflow.com/questions/14914213/… इसके अलावा, सिर्फ इसलिए कि कई जगहों पर एक निर्देश का उपयोग किया जाएगा इसका मतलब यह नहीं है कि हमें स्वचालित रूप से एक अलग गुंजाइश का उपयोग करना चाहिए।