Karmaşık uygulamalar geliştirenler için, seçiminizde bir performans etkisi olduğunu unutmayın. Ayrıca, Mark yanıtını daha teknik detaylarla tamamlamak istiyorum:
$ timeout (geri arama) mevcut özet döngüsünün yapılmasını bekleyecek (yani tüm modeli ve DOM'u açısal güncelleme), daha sonra geri çağrısını yürütecek - potansiyel olarak açısal modeli etkileyecek - daha sonra $apply
kök $ kapsamında bir tam başlatacak ve en küçüğü herşey.
$ evalAsync (geri arama) , geri çağrıyı geçerli veya sonraki özet döngüsüne ekler. ng-click
Başka bir deyişle, bir özet döngüsünün içindeyseniz (örneğin, bazı yönergelerden çağrılan bir işlevde ), bu hiçbir şey beklemez, kod hemen yürütülür. Eşzamansız bir çağrının içindeyseniz, örneğin a setTimeout
, yeni bir özet döngüsü ( $apply
) tetiklenir.
Performanslar açısından, $evalAsync
kodun yürütülmesinden önce görünümün güncel olması sizin için önemli değilse, örneğin eleman genişliği ve benzerleri gibi bazı DOm özniteliklerine erişmeniz gerekiyorsa , her zaman aramak daha iyidir .
$ Timeout, $ evalAsync, $ digest, $ Apply arasındaki fark hakkında daha fazla ayrıntı istiyorsanız, sizi bu soru hakkındaki cevabımı okumaya davet ediyorum: https://stackoverflow.com/a/23102223/1501926
Ayrıca belgeleri de okuduğunuzdan emin olun. :
$ EvalAsync, ifadenin ne zaman yürütüleceğine dair hiçbir garanti vermez, sadece:
- değerlendirmeyi zamanlayan işlevden sonra (tercihen DOM oluşturma işleminden önce) yürütülür.
- İfade yürütüldükten sonra en az bir $ digest döngüsü gerçekleştirilir.
Not: Bu işlev $ digest döngüsünün dışında çağrılırsa, yeni bir $ digest döngüsü programlanır . Ancak, modeli her zaman $ uygula çağrısından değiştiren çağrı kodunun kullanılması önerilir. Buna $ evalAsync aracılığıyla değerlendirilen kod da dahildir.