8

Hala aynı sorunla karşılaşıyorum, filtreler ve işlevler tüm zamanlar olarak adlandırılıyor.Angular.js, tüm diğer öğelerin üzerinde ng-yinelemeli filtrelerin bir öğesinin üzerinde çalışmasını sağlar

Örnek burada, http://plnkr.co/edit/G8INkfGZxMgTvPAftJ91?p=preview, herhangi bir şeyi tek bir satırda değiştirdiğinizde, someFilter filtresi 1000 kez çağrılır.

Görünüşe göre, bir alt kapsamdaki herhangi bir değişiklik üstbilgiye kadar kabarcıklar ve $ digest'in çalışmasına neden olarak tüm filtrelerin çalışmasına neden olur (https://stackoverflow.com/a/15936362/301596). Bu doğru mu? Özel durumumda bunun olmasını nasıl engelleyebilirim?

Yalnızca değiştirilen öğede nasıl çalıştırılabilir? filtre değiştirme bile ng-tekrarın öğeler üzerinde olmadığında bile denir benim asıl kullanım durumunda

, o kadar anlamsız ve aslında performans sorunlarını neden oluyor ..

// düzenlemek temizlenir plunker Bu ne kadar açısal kirli kontrol çalışmaları olduğunu http://plnkr.co/edit/G8INkfGZxMgTvPAftJ91?p=preview

cevap

4

tüm gereksiz şeyler. 500 öğeden oluşan bir diziniz varsa ve dizi değişirse, filtrenin tüm diziye yeniden uygulanması gerekir. Ve şimdi "neden iki kez" diye merak ediyorsun? another answer itibaren

: herhangi bir değişiklik olup olmadığını görmek için tüm filtreleri çağırmanız gerekir böylece

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

Ve cevap başvurduğu: How does data binding work in AngularJS?

Düzenleme: Eğer gerçekten (ben eski bir Core 2 Duo PC'de değilim) uyuşukluk fark ediyorsanız, muhtemelen yaratıcı bir dizi vardır UI'nizin ne olacağına bağlı olarak etrafınızdaki yollardan geçebilirsiniz.

kullanıcı verilerini düzenleme durumdayken kullanıcı düzenleme modundan çıktığında geri modelini değişiklikleri ayrıntılı olarak ve senkronize etmek düzenleme moduna satır koyabilirsiniz
    1. Yalnızca modeli güncelleme olabilir onblur yerine onkeypress bu gibi bir yönergesini kullanarak: http://jsfiddle.net/langdonx/djtQR/1/
  • +0

    Evet ben Misko yazdıklarını okumak, ben de o olacak hatta 2000 öğelerle fark edilebilir değil okumayı, henüz çok farkedilir. Bu filtreler, gerçek filtrelerden önce (http://plnkr.co/edit/G8INkfGZxMgTvPAftJ91?p=preview), özellikle birden fazla filtreye sahip olduğumda, girdideki herhangi bir şeyi yazdığım zaman, tüm bu filtreler çağrıldığında, ciddi bir acıdır. ng-tekrarının her satırında. Beni init ve daha sonra değiştirdikten sonra filtreye ihtiyacım olan değeri değiştirmenin daha iyi olduğunu düşünüyorum. – foxx

    +1

    Bu konuda sizi destekliyorum bu gerçekten ağrılı bir açısal özelliktir çünkü filtreler sadece veri dönüşümleri içindir, bu yüzden –

    +0

    her satırı izlememelidir. Tek çözüm küçük koleksiyonlar mıdır? – Bart

    İlgili konular