Saya telah menggunakan AngularJS untuk sementara waktu sekarang, dan telah menemukan kebutuhan untuk menggunakan $ timeout sesekali (Sepertinya biasanya untuk init plugin jQuery).
Baru-baru ini, saya telah mencoba untuk mendapatkan pemahaman yang lebih baik dan lebih mendalam tentang siklus intisari, dan saya menemukan fungsi $ evalAsync .
Sepertinya fungsi itu menghasilkan hasil yang serupa $timeout
, hanya saja Anda tidak memberinya penundaan. Setiap kali saya telah menggunakannya $timeout
dengan keterlambatan 0, jadi sekarang saya bertanya-tanya apakah saya seharusnya menggunakannya $evalAsync
.
Apakah ada perbedaan mendasar antara keduanya? Kasing apa yang akan Anda gunakan satu di atas yang lain? Saya ingin mendapatkan perasaan yang lebih baik tentang kapan harus menggunakan yang mana.
sumber
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 asetTimeout
, 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 :
sumber
x
dari ruang lingkup Anda secara langsung daripada dari DOM, sehingga Anda tidak perlu menunggu apa pun. Selain itu, Anda sebaiknya menggunakanng-style
dengan css daripadawidth
properti usang . Jika Anda membutuhkan bantuan lebih lanjut, silakan buka pertanyaan baru di StackOverflow.