2014-05-09 21 views
32

Ana kapsamda bir durum değişikliği olduğunda, bir yönerge içinde bir işlev yürütmek istiyorum.

Bunu başarmanın açık yolu, etkinlik yayınlarını ($broadcast) ve dinleyicileri ($on) kullanmaktır.

$ yayını kullanmanın olay yayınına alternatif olup olmadığını merak ediyorum. Eğer öyleyse, ikisi nasıl karşılaştırır?

Anladığım kadarıyla, izlenecek ifade her $ digest döngüsünde değerlendirilir. Yani olaylar izlemektan daha mı verimli?

+0

[What is 'daha ucuz' performansa uygun $ yayın veya $ izle] 'nin olası kopyası (http://stackoverflow.com/questions/19616520/what-is-cheaper-performance-wise-broadcast-or-watch) – Blackhole

cevap

31

$watch işlevi kapsamdaki değişkenleri izlemek için kullanılır. Kapsam mirası, ana kapsam değişkenlerini de izlemenize olanak tanır, bu nedenle kullanım durumunuz için kesinlikle bir yoldur. Doğru şekilde söylediğin gibi, $on, olayları izlemek için kullanılır; bu, alt kapsamları için $broadcast veya üst kapsamlar için $emit. Bu size çok daha fazla kontrol sağlar, ancak kodlama yaparken daha fazla hataya neden olabilir, çünkü izleyicileri izlemediğiniz ve izlemediğiniz bir noktadan bir değişkene güncelleme alabilirsiniz.

Ayrıca, kapsam değişkenlerini devralmadığınızda da etkinlikleri kullanabilirsiniz. Ancak, geniş bir alanı kirletmemek için dikkatli olun, hizmetleri kullanmak bir seçenek olabilir, çünkü enjekte edip etmediğinizi hemen görürsünüz.

Bir yönerge açık olduğu kapsamı aldığından (veya bundan devraldığı), burada $watch çok daha temiz bir seçenek olduğunu söyleyebilirim.

Yönergenizde izole bir kapsam oluşturmak istiyorsanız, bağımsız değişkenleri nitelik olarak ve $observe bunları iletebilirsiniz.

+0

Bu çok net bir açıklama, ama ben buradaki noktayı özlemişim - "Fakat büyük bir alanı kirletmemek için dikkatli olun", çok fazla olayla kirletmemek anlamına mı geliyor? –

+1

Olaylarla tamamen bağımsız denetleyiciler/yönergeler arasında iletişim kurduğunuzda, her ikisinin de yayın yaptığınız ortak bir üst kapsamı olması gerekir. Çoğu durumda, bu $ rootScope olacaktır. Büyük bir uygulamada, kök kortu üzerinde birçok etkinlikle sonuçlanacaksınız ve hangi bileşenin hangi olaya abone olduğunu kontrol edeceksiniz, buna karşılık bağımlılık enjeksiyonu (ve iletişim hizmetleri) ile hemen onu görebileceksiniz ve bu daha kolay Test/ayıklama. –

+3

Yayın etkinliğinizin Hizmetleri ile sıkı kontrol altında tuttuğunuz sürece - ki bu her zaman en iyi uygulama olmalıydı - saatler boyunca performans tasarruflarının diğerlerinden daha fazla olduğunu düşünüyorum. En azında, önemsiz miktarlarda $ saatler (açık veya kapalı) bulunan sayfalar. En azından, hangi kampta olduğunuzu görmek için bir saat sayma chk yapmalısınız. – user1821052