Terkadang saya perlu menggunakan $scope.$apply
kode saya dan terkadang muncul error "intisari sudah dalam proses". Jadi saya mulai menemukan jalan keluarnya dan menemukan pertanyaan ini: AngularJS: Mencegah error $ digest sedang berlangsung saat memanggil $ scope. $ Apply () . Namun di komentar (dan di wiki sudut) Anda dapat membaca:
Jangan lakukan jika (! $ Scope. $$ phase) $ scope. $ Apply (), artinya $ scope Anda. $ Apply () tidak cukup tinggi dalam tumpukan panggilan.
Jadi sekarang saya punya dua pertanyaan:
- Mengapa tepatnya ini merupakan anti-pola?
- Bagaimana cara menggunakan $ scope. $ Apply dengan aman?
"Solusi" lain untuk mencegah kesalahan "intisari sedang dalam proses" tampaknya menggunakan $ timeout:
$timeout(function() {
//...
});
Apakah itu cara untuk pergi? Apakah ini lebih aman? Jadi, inilah pertanyaan sebenarnya: Bagaimana saya bisa sepenuhnya menghilangkan kemungkinan kesalahan "intisari sudah dalam proses"?
PS: Saya hanya menggunakan $ scope. $ Apply in non-angularjs callbacks yang tidak sinkron. (sejauh yang saya tahu itu adalah situasi di mana Anda harus menggunakan $ scope. $ apply jika Anda ingin perubahan Anda diterapkan)
scope
dari dalam sudut atau dari luar sudut. Jadi menurut Anda ini selalu tahu, apakah Anda perlu meneleponscope.$apply
atau tidak. Dan jika Anda menggunakan kode yang sama untuk keduascope
manipulasi sudut / non-sudut , Anda salah melakukannya, itu harus selalu dipisahkan ... jadi pada dasarnya jika Anda mengalami kasus di mana Anda perlu memeriksascope.$$phase
, kode Anda tidak dirancang dengan cara yang benar, dan selalu ada cara untuk melakukannya dengan 'cara yang benar'