2012-07-26 21 views
22

filtreleme angularjs için bu normal midir, ancak bu tür deli gibi hissediyorum.Ben açısal yeni hemen hemen olduğum

Birden koleksiyonları bir kontrolör kapsamında ng-tekrarı yoluyla görüntülenen var. Basit bir sorgulama yapmak için her listenin bir giriş alanı var. Kodumda çeşitli filtreler ile uğraşıyordum ve filtre işlevimde bir console.log'u yerleştirdim. Filtre fonksiyonumun her defasında bir liste için çağrıldığını fark ettim, bu kapsamdaki tüm listeler için çağrıldı. Ayrıca, filtre işlevini her seferinde iki kez çağırıyordu. Yani 3 koleksiyon ile, listelerin birini filtrelemek filtre işlevini 6 kez çağırırdı.

Bunun kendi özel filtre sandım o yüzden varsayılan filtre fonksiyonunu bunu denedik. Aynı hikaye. Burada yanlış yapıyorum/

:

https://dl.dropbox.com/u/905197/angular-filter-test.html

konsoluna gidin ve kendiniz görün: İşte benim kod? Bu çok basit bir şey gibi görünüyor ama bu çok iş yapıyor. herhangi bir değişiklik varsa görmek için tüm filtreleri aramak gerekiyor böylece

cevap

25

Bu, normaldir angularjs, bir 'kirli-kontrol' yaklaşımını kullanır. Bundan sonra, bir değişkendeki (yazdığınız) bir değişiklik yaptığınızı algılar ve daha sonra başka değişikliklerin olup olmadığını algılamak için tüm filtreleri yeniden çalıştırır.

this numaralı soruya ilk cevap bulamadı

+1

İlginç. Bu, neden hepsinin çağrıldığını açıklıyor. Şimdi, neden her değiştiğinde her biri iki kere çağrılıyor? –

+1

İlk arama, değişikliği tespit eden gözlemcilerden geliyor. Çünkü o zaman bir haberci değişiklik yapabileceğinden haber değişip değişmediğini görmek için tekrar çağrılmaları gerekiyor. Bu işlem hiçbir değişiklik bulunana veya “döngü” maksimum etkileşim sayısına ulaşana kadar tekrarlanacaktır (bence bu 10'dur). –

+0

Bu nasıl önlenir? json araması yapıyorum ama sadece herhangi bir yere tıklayarak 10 kata kadar çağrılabilir. – Gino

İlgili konular