9

मैं वर्तमान में आलसी लोड सामग्री + नियंत्रकों के साथ कुछ कोड पर काम कर रहा हूं। मेरा कोड मूल रूप से this fiddle जैसा काम करता है। हालांकि, किसी कारण से, मेरा संस्करण काम नहीं करता है, और इसके बजाय मुझे an infinite digest cycle मिलता है जब भी कोणीय इसके दृश्य को अपडेट करने का प्रयास करता है।कोणीय के पाचन चक्र को डीबग करना: अनंत लूप का कारण कैसे ढूंढें?

मुद्दा गायब हो जाता है जब मैं इस सरल दोहराने बयान से ng-include निकालें:

<div class="container" ng-repeat="pageName in pageNames"> 
    <div ng-include="pageName"></div> 
</div> 

अजीब हिस्सा: exact same error होता है, भले ही pageNames दायरे करने के लिए सौंपा कभी नहीं किया गया है। दोनों स्कॉप्स (बाहरी और आंतरिक नियंत्रक का दायरा - मेरे पास प्रत्येक है) पूरी तरह खाली हो सकता है (मैंने बटरंग के साथ जांच की - मेरे पास केवल दो खाली स्कॉप्स हैं), और मुझे अभी भी त्रुटि मिलती है।

मेरा कोड बहुत अधिक निर्भरता के साथ बहुत अधिक शामिल है, इसलिए इसे यहां पोस्ट करना कोई समझ नहीं आता है। यह सबसे शुद्ध संस्करण ऊपर की पहेली है। मुझे दोनों के बीच तर्क में कोई अंतर नहीं मिल रहा है। जब मैं Batarang के साथ अपने कार्यक्षेत्र का निरीक्षण किया, मैं कुछ भी देख पा रहे हैं नहीं संदिग्ध या तो:

  • मैं अपने कार्यक्षेत्र में कार्य उपयोग नहीं कर रहा
  • मैं $watch
  • का इस्तेमाल करते हैं नहीं था कि मैं का उपयोग करना नहीं था ng-model

मैं निष्कर्ष निकालता हूं कि मैं स्पष्ट रूप से कुछ भी नहीं बदल रहा हूं, इसलिए यह कोणीय के हुड के नीचे कुछ होना चाहिए।

क्या मैं किसी भी तरह से मुझे यह बताने के लिए कोणीय या बटरंग प्राप्त कर सकता हूं कि पाचन पुनरावृत्ति के बाद कौन सा गुंजाइश चर बदल गया है, तो मैं अनंत लूप के कारण अपराधी की पहचान कर सकता हूं?

अद्यतन:

मैं अंत में है कि history.pushState भोजनालयों सब कुछ पता लगा। अब मैं $location सेवा जैसे विकल्पों में देख रहा हूं। फिर भी, मैं अभी भी जानना चाहूंगा कि इस तरह के मुद्दे को सामान्य रूप से कैसे डिबग करना है। कोई संकेत?

+3

क्या कोई कारण है कि आप अपने देव पर्यावरण में कोणीय के एक अपूर्ण संस्करण का उपयोग नहीं कर सकते हैं और बस इसके पाचन() फ़ंक्शन में ब्रेकपॉइंट सेट कर सकते हैं? – Fordio

+3

DevTools सेट पकड़ा अपवाद सहित सभी अपवाद हैं, पर तोड़ने के लिए। आप, minified कोड के साथ फंस रहे हैं या तो minification या सुंदर प्रिंट जावास्क्रिप्ट को हटा दें। – ivarni

उत्तर

11

प्रत्येक पाचन में परिवर्तित होने वाले स्कोप वेरिएबल्स की सूची प्राप्त करने का कोई सीधा तरीका नहीं है, लेकिन यदि आप एक आपातकालीन-डिबगिंग स्थिति में हैं तो अस्थायी रूप से ऐसा करने के लिए एंगुलर के स्रोत को संशोधित करना वास्तव में आसान है। $ पचाने कोड यहाँ है:

angular.js > src > ng > rootScope.js

आप इस विधि को देखें, तो आप एक watchLog सरणी के लिए संदर्भ देखेंगे। AngularJS उपयोगी त्रुटि संदेशों की रिपोर्ट करने के लिए इसका उपयोग करता है जब यह आपके जैसे लूपिंग का पता लगाता है। आप यहां कुछ कंसोल.लॉग आइटम आसानी से जोड़ सकते हैं, या अपनी खुद की सरणी बनाए रख सकते हैं जिसे आप बाद में लॉग इन कर सकते हैं या अपने डीबगर का निरीक्षण कर सकते हैं। क्या हो रहा है यह देखने के लिए आप ब्रेकपॉइंट्स भी सेट कर सकते हैं।

यह मुझे स्पष्ट नहीं है कि history.pushState() के साथ इसका कोई संबंध नहीं होगा क्योंकि आपका मूल प्रश्न $ स्थान, इतिहास या संबंधित कार्यों के उपयोग के बारे में बात नहीं करता है। हालांकि, ध्यान दें कि यह एक बहुत ही आम समस्या है जिसमें अनंत लूप बनाने के लिए शामिल हैं जब पथ आप अपेक्षा नहीं करते हैं। सर्वर-साइड (उदा। नोडजेएस) परियोजनाओं की एक बड़ी संख्या घर/सूचकांक पृष्ठ को वापस करने के लिए कॉन्फ़िगर की जाती है जब कोई संसाधन नहीं मिलता है क्योंकि वे मानते हैं कि फ्रंट-एंड रूटिंग चल रहा है। यह वास्तव में एक बड़ी समस्या है क्योंकि आप अपने होम पेज को अपने होम पेज में एम्बेड करना समाप्त कर देते हैं, जो फिर एक और प्रतिलिपि एम्बेड करता है।मैं इस तरह की समस्या एस/ओ पर एक सप्ताह के बारे में यहाँ एक बार पोस्ट देखें।

इस के लिए एक साधारण परीक्षण नहीं मिला किसी भी संसाधन के लिए एक खाली 404 वापस जाने के लिए अपने सर्वर को बदलने के लिए है। ui-रूटर, ngRoute, ngInclude, आदि

यह विशेष रूप से आम जब रास्तों में सापेक्ष URL का उपयोग है: मैं हमेशा इस जब भी किसी का उल्लेख है "अनंत लूप" और परिसंपत्ति लोड हो रहा है आपरेशन के किसी भी प्रकार सलाह देते हैं।

संबंधित मुद्दे