दिलचस्प पोस्ट
"जबकि (* s ++ = * t ++)" स्ट्रिंग की प्रतिलिपि बनाते हैं? कैसे एंड्रॉइड में एक्शनबार शीर्षक को संरेखित करें? मैं PHP में फिर से लिखना कैसे करूं? UIView ड्रैग (छवि और पाठ) एचटीएमएल / सीएसएस का इस्तेमाल करते हुए एक छवि के आसपास पाठ कैसे लपेटें asp.net का उपयोग करके एम्बेडेड छवि के साथ मेल भेजना गिट के बिना फ़ाइल में एक गीता SHA1 को कैसे असाइन करें? कैसे एक वैश्विक चर परिभाषित करने के लिए कि मेरे आवेदन में कहीं भी पहुँचा जा सकता है? अनाम कार्यों में php चर यादृच्छिक संख्या पीढ़ी – उसी नंबर को वापस Printf में अनुक्रमित शून्य से बचें () पायथन अनुरोध अनुरोध। Exceptions.SSLError: _ssl.c: 504: प्रोटोकॉल का उल्लंघन हुआ है EOF User_id के साथ Google+ प्रोफ़ाइल चित्र url प्राप्त करना यह स्पष्ट करने का कोई आसान तरीका है कि मैं सूची क्यों नहीं कर सकता <Animal> animals = new ArrayList <dog> ()? JQuery में बाइंड और लाइव विधियों के बीच अंतर क्या है?

एनजी-दोहराने के साथ किसी फ़ंक्शन द्वारा लौटी वस्तुओं के माध्यम से लूप कैसे करें?

मैं बार-बार divs बनाना चाहता हूं, आइटम एक फ़ंक्शन द्वारा लौटाए गए ऑब्जेक्ट हैं I हालांकि निम्न कोड रिपोर्ट त्रुटियां: 10 $ डाइजेस्ट () पुनरावृत्तियों तक पहुंचे। निरस्त किया जा रहा! jsfiddle यहां है: http://jsfiddle.net/BraveOstrich/awnqm/

<body ng-app> <div ng-repeat="entity in getEntities()"> Hello {{entity.id}}! </div> </body> 

वेब के समाधान से एकत्रित समाधान "एनजी-दोहराने के साथ किसी फ़ंक्शन द्वारा लौटी वस्तुओं के माध्यम से लूप कैसे करें?"

संक्षिप्त जवाब : क्या आपको वास्तव में इस तरह के फ़ंक्शन की आवश्यकता है या आप संपत्ति का उपयोग कर सकते हैं? http://jsfiddle.net/awnqm/1/

लंबा जवाब

सादगी के लिए मैं केवल आपके केस का वर्णन करता हूं- वस्तुओं के सरणी के लिए एनजीआरपेप इसके अलावा, मैं कुछ विवरण छोड़ेगा।

AngularJS परिवर्तनों का पता लगाने के लिए गंदी जांच का उपयोग करता है जब एप्लिकेशन शुरू हो जाता है तो $rootScope लिए $rootScope$digest गहराई से करेंगे – दायरे के पदानुक्रम के लिए पहला ट्रैवर्सल। सभी स्कोप में घड़ियों की सूची है प्रत्येक घड़ी का अंतिम मूल्य (प्रारंभिक रूप से initWatchVal ) है सभी घड़ियों के लिए प्रत्येक दायरे के लिए $digest चलाता है, वर्तमान मूल्य हो जाता है ( watch.get(scope) ) और इसकी तुलना देखने के लिए watch.last । अगर मौजूदा मूल्य watch.last बराबर नहीं है। (हमेशा पहली तुलना के लिए) $digest true को dirty सेट जब सभी scopes संसाधित कर रहे हैं अगर dirty == true $digest एक और गहराई से शुरू होता है – $rootScope से पहले traversal। $digest समाप्त होता है जब गंदे == गलत या ट्रैवर्सल की संख्या == 10. उत्तरार्द्ध मामले में, त्रुटि "10 $ डाइजेस्ट () पुनरावृत्त हो गई।" लॉग इन किया जाएगा

अब ngRepeat बारे में प्रत्येक watch.get लिए। इसे कॉल करें, ऑब्जेक्ट्स से संग्रह ( getEntities लौटने का मूल्य) कैश में HashQueueMap द्वारा hashKey HashQueueMap साथ getEntities जानकारी के साथ HashQueueMap है। हर watch.get कॉल करें ngRepeat कैश से अपने hashKey द्वारा ऑब्जेक्ट प्राप्त करने का प्रयास करें। यदि यह कैश में मौजूद नहीं है, तो ngRepeat इसे कैश में संग्रहीत करता है, नया दायरा बनाता है, उस पर वस्तु डालता है, DOM तत्व बनाता है, आदि ।

अब hashKey बारे में आमतौर पर hashKey अनन्य संख्या nextUid() द्वारा उत्पन्न होती है लेकिन यह फ़ंक्शन हो सकता है । hashKey भविष्य में उपयोग के लिए पैदा करने के बाद ऑब्जेक्ट में संग्रहीत है।

क्यों आपका उदाहरण त्रुटि उत्पन्न करता है : फ़ंक्शन getEntities() हमेशा नए ऑब्जेक्ट के साथ सरणी देता है। इस ऑब्जेक्ट में ngRepeat नहीं है और ngRepeat कैश में मौजूद नहीं है। इसलिए प्रत्येक घड़ी पर {{entity.id}}{{entity.id}} लिए नई घड़ी से इसके लिए नए दायरे तैयार करता है। पहली घड़ी पर यह घड़ी है। घड़ी है watch.last == initWatchVal तो watch.get() != watch.last तो $digest नए ट्रांज़ेस शुरू करता है तो ngRepeat नए घड़ी के साथ नए अवसर पैदा करता है तो … 10 ट्रैवेलर्स के बाद आपको त्रुटि मिलती है

आप इसे कैसे ठीक कर सकते हैं

  1. प्रत्येक getEntities() कॉल पर नई ऑब्जेक्ट न बनाएं
  2. यदि आपको नई ऑब्जेक्ट बनाने की आवश्यकता है तो आप उनके लिए hashKey विधि जोड़ सकते हैं। उदाहरण के लिए इस विषय को देखें।

आशा है कि लोग जो AngularJS internals पता मुझे सही अगर मैं कुछ में गलत हूँ।

पुनरावृत्ति के बाहर सरणी को प्रारंभ करें

 <body ng-app> <div ng-init="entities = getEntities()"> <div ng-repeat="entity in entities"> Hello {{entity.id}}! </div> </div> </body> 

यह यहां बताया गया था और यह जवाब मिला:

आपका प्राप्तकर्ता idempotent नहीं है और मॉडल बदलता है (हर बार इसे कहा जाता है एक नए सरणी पैदा करके)। यह कोणीय को यह आशा रखता है कि मॉडल आखिरकार स्थिर होगा, पर कॉल करने के लिए मजबूर कर रहा है, लेकिन ऐसा कभी भी ऐसा नहीं करता है और अपवाद छोड़ देता है।

प्राप्तकर्ता वापसी का मूल्य बराबर है, लेकिन समान नहीं है और यही समस्या है

यदि आप मुख्य नियंत्रक के बाहर सरणी को स्थानांतरित करते हैं तो आप यह व्यवहार देख सकते हैं:

 var array = [{id:'angularjs'}]; function Main($scope) { $scope.getEntities = function(){return array;}; }; 

क्योंकि अब यह वही वस्तु हर बार वापस कर रहा है फ़ंक्शन के बजाय दायरे पर संपत्ति का उपयोग करने के लिए आपको अपने मॉडल को फिर से वास्तुशिल्प करने की आवश्यकता हो सकती है:

हमने एक संपत्ति के लिए नियंत्रक की विधि के परिणाम को निर्दिष्ट करके इसके आसपास काम किया, और एनजी: इसके खिलाफ दोहराना।

@przno टिप्पणी के आधार पर

 <body ng-app> <div ng-repeat="item in t = angular.equals(t, getEntities()) ? t : getEntities()"> Hello {{item.id}}! </div> </body> 

बीटीडब्ल्यू दूसरा समाधान @ आर्टम एंड्रीव का सुझाव है कि कांगारु 1.1.4 और अधिक से अधिक काम नहीं कर रहा है, जबकि पहले एक समस्या को हल नहीं करता है। इसलिए, मुझे डर है कि यह कार्यक्षमता में बिना किसी नुकसान के कम कमर कसने वाला समाधान है