Http://docs.angularjs.org/error/$rootScope:inprog देखें
समस्या तब उत्पन्न होती है जब आपके पास कॉल होता $applyहै जो कभी-कभी कोणीय कोड के बाहर अतुल्यकालिक रूप से चलाया जाता है (जब $ लागू का उपयोग किया जाना चाहिए) और कभी-कभी तुल्यकालिक रूप से कोणीय कोड के अंदर होता है (जो $digest already in progressत्रुटि का कारण बनता है )।
यह तब हो सकता है, उदाहरण के लिए, जब आपके पास एक पुस्तकालय होता है जो अतुल्यकालिक रूप से एक सर्वर से आइटम प्राप्त करता है और उन्हें कैश करता है। पहली बार किसी आइटम का अनुरोध किया गया है, इसे असिंक्रोनस रूप से पुनर्प्राप्त किया जाएगा ताकि कोड निष्पादन को अवरुद्ध न किया जा सके। हालांकि, दूसरी बार, आइटम पहले से ही कैश में है इसलिए इसे सिंक्रोनाइज़ किया जा सकता है।
इस त्रुटि को रोकने का तरीका यह सुनिश्चित करना है कि कॉल करने वाला कोड $applyएसिंक्रोनस रूप से चलाया जाता है। यह एक कॉल के अंदर अपना कोड चलाकर $timeoutदेरी सेट 0(जो डिफ़ॉल्ट है) के साथ किया जा सकता है । हालांकि, अपने कोड $timeoutको कॉल करने से कॉल करने की आवश्यकता को हटा दिया जाता है $apply, क्योंकि $ टाइमआउट एक और $digestचक्र को अपने दम पर ट्रिगर करेगा , जो बदले में, सभी आवश्यक अपडेटिंग करेगा, आदि।
समाधान
संक्षेप में, ऐसा करने के बजाय:
... your controller code...
$http.get('some/url', function(data){
$scope.$apply(function(){
$scope.mydate = data.mydata;
});
});
... more of your controller code...
यह करो:
... your controller code...
$http.get('some/url', function(data){
$timeout(function(){
$scope.mydate = data.mydata;
});
});
... more of your controller code...
केवल तभी कॉल करें $applyजब आप जानते हैं कि यह कोड चलने वाला कोड हमेशा कोणीय कोड के बाहर चलाया जाएगा (जैसे कि आपकी कॉल $ अप्लाई एक कॉलबैक के अंदर होगी जिसे आपके कोणीय कोड के बाहर कोड कहा जाता है)।
जब तक किसी व्यक्ति को $timeoutओवर इस्तमाल करने के कुछ प्रभावशाली नुकसान के बारे में पता $applyनहीं होता है , मैं यह नहीं देखता कि आप $timeoutइसके बजाय हमेशा (शून्य विलंब के साथ) का उपयोग क्यों नहीं कर सकते $apply, क्योंकि यह लगभग एक ही काम करेगा।