AngularJS में एनजी-दोहराव के दायरे के साथ निर्देश अलग-अलग करें



Answers

सीधे अपने प्रश्नों का उत्तर देने से बचने के बिना, निम्नलिखित पहेली को देखें:

http://jsfiddle.net/dVPLM/

मुख्य बिंदु यह है कि कोणीय के पारंपरिक व्यवहार से लड़ने और बदलने की कोशिश करने के बजाय, आप अपने निर्देश को ng-repeat साथ काम करने के लिए तैयार कर सकते हैं क्योंकि इसे ओवरराइड करने का प्रयास करने के विरोध में।

आपके टेम्पलेट में:

    <name-row 
        in-names-list="names"
        io-selected="selected">
    </name-row>

आपके निर्देश में:

    template:
'        <ul>' +      
'            <li ng-repeat="name in inNamesList" ng-class="activeClass($index)" >' +
'                <a ng-click="setSelected($index)">' +
'                    {{$index}} - {{name.first}} {{name.last}}' +
'                </a>' +
'            </li>' +
'        </ul>'

आपके सवालों के जवाब में:

  • ng-repeat एक गुंजाइश बनाएगा, आपको वास्तव में इसे बदलने की कोशिश नहीं करनी चाहिए।
  • निर्देशों में प्राथमिकता केवल निष्पादन आदेश नहीं है - देखें: कोणीय जेएस: एचटीएमएल कंपाइलर संकलन के लिए आदेश कैसे व्यवस्थित करता है?
  • बटरंग में, यदि आप प्रदर्शन टैब की जांच करते हैं, तो आप प्रत्येक स्कोप के लिए अभिव्यक्तियों को देख सकते हैं, और जांच सकते हैं कि यह आपकी अपेक्षाओं से मेल खाता है या नहीं।
Question

मेरे पास एक अलग-अलग दायरे के साथ निर्देश है (ताकि मैं अन्य स्थानों पर निर्देश का पुन: उपयोग कर सकूं), और जब मैं इस निर्देश का उपयोग 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 क्यों काम नहीं कर रहा है?
  • बटरंग का उपयोग करना, क्या यह जानना संभव है कि किस प्रकार का दायरा उपयोग में है?



Links