Mencoba mencari beberapa informasi dasar untuk AngularJS $rootScope.$broadcast
, Tapi dokumentasi AngularJS tidak banyak membantu. Dengan kata mudah mengapa kita menggunakan ini?
Juga, di dalam templat Handuk Panas John Papa ada fungsi khusus dalam modul umum bernama $broadcast
:
function $broadcast() {
return $rootScope.$broadcast.apply($rootScope, arguments);
}
Saya tidak mengerti apa yang dilakukannya. Jadi, inilah beberapa pertanyaan dasar:
1) Apa yang $rootScope.$broadcast
dilakukan?
2) Apa perbedaan antara $rootScope.$broadcast
dan $rootScope.$broadcast.apply
?
$rootScope.$broadcast.apply()
digunakan karena jika Anda ingin meneruskanarguments
objek khusus ke fungsi lain, Anda perlu menggunakanapply()
(sebagai lawancall()
). Selain tautan @ Blackhole ke halaman MDN di melamar, Anda juga dapat melihat entri diarguments
.Jawaban:
Apa yang
$rootScope.$broadcast
dilakukannya?$rootScope.$broadcast
sedang mengirim acara melalui cakupan aplikasi. Setiap ruang lingkup anak-anak aplikasi yang dapat menangkapnya menggunakan sederhana:$scope.$on()
.Sangat berguna untuk mengirim peristiwa ketika Anda ingin mencapai lingkup yang bukan induk langsung (misalnya, cabang dari induk)
!!! Namun satu hal yang tidak boleh dilakukan adalah menggunakan
$rootScope.$on
dari pengontrol.$rootScope
adalah aplikasinya, saat pengontrol Anda dihancurkan, pemroses peristiwa itu akan tetap ada, dan saat pengontrol Anda akan dibuat lagi, itu hanya akan menumpuk lebih banyak pemroses peristiwa. (Jadi satu siaran akan ditangkap beberapa kali). Gunakan$scope.$on()
sebagai gantinya, dan pendengar juga akan dihancurkan.Apa perbedaan antara
$rootScope.$broadcast
&$rootScope.$broadcast.apply
?Terkadang Anda harus menggunakan
apply()
, terutama saat bekerja dengan arahan dan pustaka JS lainnya. Namun karena saya tidak tahu basis kode itu, saya tidak akan tahu apakah itu masalahnya di sini.sumber
$rootScope.$on
kebocoran memori. Ini berlaku untuk jawaban yang diterima juga, karena pengontrol cenderung memanggilhiEventService
dia yang dibuat.$broadcast
vs.$broadcast.apply()
$rootScope
pada dasarnya berfungsi sebagai pendengar dan operator acara.Untuk menjawab pertanyaan tentang bagaimana ini digunakan, ini digunakan dalam hubungannya dengan
rootScope.$on
;Namun, adalah praktik yang buruk untuk menggunakannya
$rootScope
sebagai layanan acara umum aplikasi Anda sendiri, karena Anda akan segera berakhir dalam situasi di mana setiap aplikasi bergantung pada $ rootScope, dan Anda tidak tahu komponen apa yang mendengarkan kejadian apa.Praktik terbaiknya adalah membuat layanan untuk setiap acara khusus yang ingin Anda dengarkan atau siarkan.
sumber
hiEventService.listen(callback)
dari pengontrol, pendengar akan tetap ada bahkan setelah pengontrol dimusnahkan. Kebocoran memori! Mengikat ke lingkup pengontrol$scope.$on("hi",callback)
dilengkapi dengan pembersihan otomatis.$ rootScope. $ broadcast adalah cara mudah untuk memunculkan acara "global" yang dapat didengarkan oleh semua cakupan anak. Anda hanya perlu menggunakan
$rootScope
untuk menyiarkan pesan, karena semua cakupan turunan bisa mendengarkannya.Cakupan root menyiarkan acara:
Setiap anak Scope dapat mendengarkan acara tersebut:
Mengapa kami menggunakan $ rootScope. $ Broadcast? Anda dapat menggunakan
$watch
untuk mendengarkan perubahan variabel dan menjalankan fungsi saat status variabel berubah. Namun, dalam beberapa kasus, Anda hanya ingin memunculkan peristiwa yang dapat didengarkan oleh bagian lain dari aplikasi, terlepas dari perubahan apa pun dalam status variabel cakupan. Inilah saatnya$broadcast
membantu.sumber
Meneruskan data !!!
Saya heran mengapa tidak ada yang menyebutkan bahwa
$broadcast
menerima parameter di mana Anda dapat mengirimkanObject
yang akan diterima dengan$on
menggunakan fungsi panggilan balikContoh:
sumber
Apa fungsi $ rootScope. $ Broadcast?
Ini menyiarkan pesan ke masing-masing pendengar di seluruh aplikasi angular, sarana yang sangat kuat untuk mentransfer pesan ke cakupan pada tingkat hierarki yang berbeda (baik itu orang tua, anak atau saudara)
Demikian pula, kami memiliki $ rootScope. $ Emit, satu-satunya perbedaan adalah yang pertama juga ditangkap oleh $ scope. $ On sedangkan yang kedua ditangkap hanya oleh $ rootScope. $ On.
lihat contoh: - http://toddmotto.com/all-about-angulars-emit-broadcast-on-publish-subscribing/
sumber