कभी-कभी मुझे $scope.$apply
अपने कोड में उपयोग करने की आवश्यकता होती है और कभी-कभी यह "पहले से ही प्रगति में पचा" त्रुटि फेंकता है। इसलिए मैंने इसके चारों ओर एक रास्ता ढूंढना शुरू किया और यह प्रश्न पाया: एंगुलरजेएस: $ स्कोप को बुलाकर प्रगति में पहले से ही $ पचाने को रोकें। $ लागू करें () । हालांकि टिप्पणियों में (और कोणीय विकी पर) आप पढ़ सकते हैं:
अगर (! $ स्कोप। $$ फेज) $ स्कोप नहीं है। $ apply।
तो अब मेरे दो सवाल हैं:
- वास्तव में यह एक प्रतिमान क्यों है?
- मैं सुरक्षित रूप से $ गुंजाइश का उपयोग कैसे कर सकता हूं।
"पहले से ही प्रगति में डाइजेस्ट" को रोकने के लिए एक और "समाधान" त्रुटि $ टाइमआउट का उपयोग कर रहा है:
$timeout(function() {
//...
});
क्या वह रास्ता है? क्या यह सुरक्षित है? तो यहां असली सवाल है: मैं "प्रगति में पहले से ही पचा" त्रुटि की संभावना को पूरी तरह से कैसे समाप्त कर सकता हूं ?
पुनश्च: मैं केवल $ गुंजाइश का उपयोग कर रहा हूँ। $ गैर-कोणीयुलर कॉलबैक में लागू होते हैं जो समकालिक नहीं होते हैं। (जहाँ तक मैं जानता हूँ कि वे परिस्थितियाँ हैं जहाँ आपको $ गुंजाइश का उपयोग करना चाहिए। यदि आप चाहते हैं कि आपके परिवर्तन लागू हों तो $ लागू करें)
digest already in progress
त्रुटि नहीं करता
scope
कोणीय के भीतर से या कोणीय के बाहर से हेरफेर कर रहे हैं । तो इसके अनुसार आप हमेशा जानते हैं, अगर आपको कॉल करने की आवश्यकता हैscope.$apply
या नहीं। और यदि आप दोनों कोणीय / गैर-कोणीयscope
हेरफेर के लिए समान कोड का उपयोग कर रहे हैं, तो आप इसे गलत कर रहे हैं, इसे हमेशा अलग किया जाना चाहिए ... इसलिए मूल रूप से यदि आप किसी ऐसे मामले में भाग लेते हैं जहां आपको जांच करने की आवश्यकता हैscope.$$phase
, तो आपका कोड नहीं है एक सही तरीके से डिज़ाइन किया गया है, और हमेशा इसे 'सही तरीके से' करने का एक तरीका है