Intenté encontrar información básica para AngularJS $rootScope.$broadcast, pero la documentación de AngularJS no ayuda mucho. En palabras sencillas, ¿por qué usamos esto?
Además, dentro de la plantilla Hot Towel de John Papa hay una función personalizada en el módulo común llamado $broadcast:
function $broadcast() {
return $rootScope.$broadcast.apply($rootScope, arguments);
}
No entendí qué está haciendo esto. Así que aquí hay un par de preguntas básicas:
1) ¿Qué hace $rootScope.$broadcast?
2) ¿Cuál es la diferencia entre $rootScope.$broadcasty $rootScope.$broadcast.apply?

$rootScope.$broadcast.apply()se usa porque si desea pasar elargumentsobjeto especial a otra función, debe usarapply()(en lugar decall()). Además del enlace de @ Blackhole a la página de MDN en la solicitud, también puede consultar la entrada enarguments.Respuestas:
¿Qué
$rootScope.$broadcasthacer?$rootScope.$broadcastestá enviando un evento a través del ámbito de la aplicación. Cualquier niños alcance de la aplicación puede atraparlo usando un simple:$scope.$on().Es especialmente útil enviar eventos cuando desea alcanzar un alcance que no es un padre directo (una rama de un padre, por ejemplo)
!!! Sin embargo, una cosa que no debe hacer es usar
$rootScope.$ondesde un controlador.$rootScopees la aplicación, cuando su controlador sea destruido, ese oyente de eventos seguirá existiendo, y cuando su controlador se cree de nuevo, simplemente acumulará más oyentes de eventos. (Entonces, una transmisión será captada varias veces). Úselo en su$scope.$on()lugar, y los oyentes también serán destruidos.¿Cuál es la diferencia entre
$rootScope.$broadcast&$rootScope.$broadcast.apply?A veces tiene que usar
apply(), especialmente cuando se trabaja con directivas y otras bibliotecas JS. Sin embargo, dado que no conozco esa base de código, no podría decir si ese es el caso aquí.fuente
$rootScope.$onpérdida de memoria. Esto también se aplica a la respuesta aceptada, ya que es probable que los controladores llamen alhiEventServiceque creó.$broadcastvs.$broadcast.apply()$rootScopebásicamente funciona como un detector y despachador de eventos.Para responder a la pregunta de cómo se usa, se usa junto con
rootScope.$on;Sin embargo, es una mala práctica utilizarlo
$rootScopecomo servicio general de eventos de su propia aplicación, ya que rápidamente terminará en una situación en la que cada aplicación depende de $ rootScope y no sabe qué componentes están escuchando qué eventos.La mejor práctica es crear un servicio para cada evento personalizado que desee escuchar o transmitir.
fuente
hiEventService.listen(callback)desde un controlador, el oyente seguirá existiendo incluso después de que se destruya el controlador. ¡Pérdida de memoria! La vinculación al alcance del controlador$scope.$on("hi",callback)viene con limpieza automática.$ rootScope. $ broadcast es una forma conveniente de generar un evento "global" que todos los ámbitos secundarios pueden escuchar. Solo necesita usar
$rootScopepara transmitir el mensaje, ya que todos los ámbitos descendientes pueden escucharlo.El alcance raíz transmite el evento:
Cualquier niño Scope puede escuchar el evento:
¿Por qué usamos $ rootScope. $ Broadcast? Puede usar
$watchpara escuchar cambios de variable y ejecutar funciones cuando cambia el estado de la variable. Sin embargo, en algunos casos, simplemente desea generar un evento que otras partes de la aplicación puedan escuchar, independientemente de cualquier cambio en el estado de la variable de alcance. Aquí es cuando$broadcastes útil.fuente
Pasando datos !!!
Me pregunto por qué nadie menciona que
$broadcastacepta un parámetro en el que puede pasar unObjectque se recibirá mediante el$onuso de una función de devolución de llamadaEjemplo:
fuente
¿Qué hace $ rootScope. $ Broadcast?
Transmite el mensaje a los respectivos oyentes en toda la aplicación angular, un medio muy poderoso para transferir mensajes a ámbitos en diferentes niveles jerárquicos (ya sea padre, hijo o hermanos)
De manera similar, tenemos $ rootScope. $ Emit, la única diferencia es que el primero también es capturado por $ scope. $ On mientras que el segundo es capturado solo por $ rootScope. $ On.
consulte para ver ejemplos: - http://toddmotto.com/all-about-angulars-emit-broadcast-on-publish-subscribing/
fuente