मैं AngularJS 1.6 और एक घटक आधारित वेब एप्लिकेशन के साथ काम कर रहा हूं। मैं एक नया घटक बना रहा हूं जिसमें एक टेबल है और एक पंक्ति का चयन करने पर एक और स्टेटलेस घटक उस पंक्तियों की वस्तु के बारे में विस्तृत जानकारी के साथ प्रदर्शित किया जा रहा है (पंक्ति '<'-बाइंडिंग के माध्यम से नीचे जाती है)। अब तक, यह काम करता है। मैं स्टेटफुल और स्टेटलेस घटकों का उपयोग कर रहा हूं, और टोड मोटो से मैंने एक तरह से बाध्यकारी (कोणीय में माइग्रेट करने की तैयारी में) का उपयोग करना सीखा और जावास्क्रिप्ट के बाइंड-बाय-रेफरेंस को तोड़ने के लिए मुझे स्टेटलेस घटक में निम्नलिखित ईवेंट हुक का उपयोग करना चाहिए (मेरे विशिष्ट मामले में विस्तार घटक):

ctrl.$onChange = function(changes) {
    if (changes.row) {
        this.row = angular.copy(this.row);
    }
};

यह इस अर्थ में काम करता है कि बाल घटक में परिवर्तन अब मूल घटक में वस्तु को नहीं बदलता है, क्योंकि बाइंड-बाय-रेफरेंस टूट जाता है।

समस्या यह है: यदि मैं तालिका में एक और पंक्ति का चयन करता हूं, तो बदली हुई वस्तु अब नीचे नहीं जा रही है, स्टेटलेस घटक बाध्यकारी में एक बदली हुई वस्तु को "पहचान" नहीं देता है! अगर मैं उपरोक्त कोड को छोड़ देता हूं तो यह काम करता है, लेकिन क्या यह अभी भी कोणीय में माइग्रेट करते समय काम करेगा? मुझे क्या करना चाहिए?

0
Vortilion 4 अक्टूबर 2019, 16:26

1 उत्तर

सबसे बढ़िया उत्तर

परिवर्तनों की प्रतिलिपि बनाएँ:

ctrl.$onChange = function(changes) {
    if (changes.row) {
        ̶t̶h̶i̶s̶.̶r̶o̶w̶ ̶=̶ ̶a̶n̶g̶u̶l̶a̶r̶.̶c̶o̶p̶y̶(̶t̶h̶i̶s̶.̶r̶o̶w̶)̶;̶
        this.row = angular.copy(changes.row.currentValue);
    }
};

डॉक्स से:

जीवन-चक्र के हुक

निर्देश नियंत्रक निम्नलिखित तरीके प्रदान कर सकते हैं जिन्हें एंगुलरजेएस द्वारा निर्देश के जीवन-चक्र में बिंदुओं पर बुलाया जाता है:

  • $onChanges(changesObj) - जब भी वन-वे (<) या इंटरपोलेशन (@) बाइंडिंग को अपडेट किया जाता है, तब कॉल किया जाता है। changesObj एक हैश है जिसकी कुंजी बदली हुई बाउंड प्रॉपर्टी के नाम हैं, और मान { currentValue, previousValue, isFirstChange() } के रूप में एक ऑब्जेक्ट हैं। इस हुक का उपयोग किसी घटक के भीतर अपडेट को ट्रिगर करने के लिए करें जैसे कि बाध्य मान को क्लोन करना ताकि बाहरी मान के आकस्मिक उत्परिवर्तन को रोका जा सके। ध्यान दें कि इसे तब भी कहा जाएगा जब आपके बाइंडिंग इनिशियलाइज़ होंगे।

अधिक जानकारी के लिए देखें

1
Community 20 जून 2020, 12:12