Untuk mereka yang membangun aplikasi yang kompleks, perlu diketahui bahwa ada dampak kinerja pada pilihan Anda. Saya juga ingin melengkapi jawaban Mark dengan rincian teknis lebih lanjut:
$ timeout (callback) akan menunggu siklus digest saat ini dilakukan (mis. perbarui semua model dan DOM), kemudian akan menjalankan callback - berpotensi memengaruhi model sudut - kemudian meluncurkan penuh $apply
pada lingkup $ root, dan redigest segala sesuatu.
$ evalAsync (callback) , di sisi lain, akan menambahkan callback ke siklus saat ini, atau selanjutnya, digest. Yang berarti jika Anda berada dalam siklus intisari (misalnya dalam fungsi yang dipanggil dari beberapa ng-click
arahan), ini tidak akan menunggu apa pun, kode akan segera dieksekusi. Jika Anda berada dalam panggilan asinkron, misalnya a setTimeout
, siklus intisari baru ( $apply
) akan dipicu.
Jadi dalam hal kinerja selalu lebih baik untuk memanggil $evalAsync
, kecuali penting bagi Anda bahwa tampilan adalah yang terbaru sebelum mengeksekusi kode Anda, misalnya jika Anda memerlukan akses ke beberapa atribut DOm seperti lebar elemen dan sejenisnya.
Jika Anda ingin detail lebih lanjut tentang perbedaan antara $ timeout, $ evalAsync, $ digest, $ apply, saya mengundang Anda untuk membaca jawaban saya pada pertanyaan lain: https://stackoverflow.com/a/23102223/1501926
Pastikan juga untuk membaca dokumentasi :
$ EvalAsync tidak memberikan jaminan kapan ekspresi akan dieksekusi, hanya itu:
- itu akan dieksekusi setelah fungsi yang menjadwalkan evaluasi (sebaiknya sebelum rendering DOM).
- setidaknya satu siklus $ digest akan dilakukan setelah eksekusi ekspresi.
Catatan: jika fungsi ini disebut di luar siklus $ digest, siklus $ digest baru akan dijadwalkan . Namun, disarankan untuk selalu memanggil kode yang mengubah model dari dalam panggilan $ apply. Itu termasuk kode yang dievaluasi melalui $ evalAsync.