Nasıl öğeleri ng-repeat ile bir işlev tarafından döndürülen bir Döngü?
Divs tekrar tekrar oluşturmak istiyorum, öğeleri nesneleri işlevi tarafından döndürülür. Ancak aşağıdaki kodu rapor hataları: 10 $digest() yineleme ulaştı. İptal ediliyor! jsfiddle işte: http://jsfiddle.net/BraveOstrich/awnqm/
<body ng-app>
<div ng-repeat="entity in getEntities()">
Hello {{entity.id}}!
</div>
</body>
CEVAP
Kısa cevapgerçekten ya özelliğini kullanabilirsiniz Bu işlevi ihtiyacınız var mı? http://jsfiddle.net/awnqm/1/
Uzun cevap
Basitlik için, davanız için tarif - nesnelerin dizi için ngRepet. Ayrıca, bazı detayları atla edeceğim.
AngularJS algılamak için dirty checking kullanır. Uygulama başlatıldığında $rootScope
46 *çalışır. $digest
derinlik-ilk scope's hierarchy geçişi yapacak. Tüm kapsamları saatler listesi var. Her izle son değeri (başlangıçta initWatchVal
) vardır. Tüm saatler için her bir kapsam için $digest
çalışır, akım değeri (watch.get(scope)
) alır ve watch.last
karşılaştırır. Akım değeri watch.last
(her zaman için ilk karşılaştırma) eşit değil ise $digest
true
dirty
ayarlayın. Tüm kapsamları ise 13* $digest
*başlarsa işlendiğinde başka bir-ilk derinlik $rootScope
geçişi. $digest
= = false veya sayı == 10 dolaşımları sona erer. İkinci durumda, hata "10 $digest() yineleme ulaştı" kaydedilir..
ngRepeat
şimdi hakkında. watch.get
Her bir çağrı için önbellekte ek bilgi (HashQueueMap
hashKey
) ile toplama nesneleri (getEntities
dönen değeri saklar. watch.get
Her çağrı için ngRepeat
önbellek hashKey
nesne almaya çalışın. Eğer önbellekte varsa, ngRepeat
önbellekte depolar, yeni bir kapsam oluşturur, nesne koyar, DOM öğesi, etc oluşturur.
hashKey
şimdi hakkında. Genellikle hashKey
benzersiz bir sayı nextUid()
tarafından oluşturulur. Ama function olabilir. hashKey
gelecekte kullanmak için ürettikten sonra nesne saklanır.
Örnek hata neden oluşturur: fonksiyon getEntities()
her zaman yeni bir nesne dizisi döndürür. Bu nesne hashKey
yok ngRepeat
önbellek yer almıyor. watch.get
her ngRepeat
{{entity.id}}
yeni izle, ile yeni bir kapsam oluşturur. Bu ilk watch.get
watch.last == initWatchVal
izle. watch.get() != watch.last
. $digest
yeni geçiş başlar. ngRepeat
yeni izle, ile yeni bir kapsam oluşturur. Yani ... 10 erişir sonra hata alıyorum.
Nasıl tamir edebilirsiniz
getEntities()
her çağrıda yeni nesneler oluşturun.- Eğer yeni bir nesne oluşturmak istiyorsanız, onlar için
hashKey
yöntem ekleyebilirsiniz. Örnekler için this topic bkz.
Biliyorum insanlar iç eğer yanılıyorsam beni düzeltin bir şey AngularJS umarım.
Nasıl hesapların yapılabilmesi dizi il...
Nasıl sipariş sonra Oracle bir sorgu t...
Nasıl kedi dosyaları bulmak için komut...
Nasıl bir zamanlar her satır sorgu tar...
Nasıl mouseout olaylar alt öğeleri tar...