J'ai essayé de trouver des informations de base sur AngularJS $rootScope.$broadcast
, mais la documentation AngularJS n'aide pas beaucoup. En termes simples, pourquoi utilisons-nous cela?
De plus, à l'intérieur du modèle Hot Towel de John Papa, il y a une fonction personnalisée dans le module commun nommé $broadcast
:
function $broadcast() {
return $rootScope.$broadcast.apply($rootScope, arguments);
}
Je n'ai pas compris ce que cela faisait. Voici donc quelques questions de base:
1) Que fait $rootScope.$broadcast
-on?
2) Quelle est la différence entre $rootScope.$broadcast
et $rootScope.$broadcast.apply
?
$rootScope.$broadcast.apply()
est utilisé car si vous souhaitez passer l'arguments
objet spécial à une autre fonction, vous devez utiliserapply()
(par opposition àcall()
). En plus du lien de @ Blackhole vers la page MDN sur Apply, vous pouvez également consulter l'entrée surarguments
.Réponses:
Que fait
$rootScope.$broadcast
-on?$rootScope.$broadcast
envoie un événement via l'étendue de l'application. Tous les enfants portée de cette application peut attraper l' aide d' un simple:$scope.$on()
.Il est particulièrement utile d'envoyer des événements lorsque vous souhaitez atteindre une portée qui n'est pas un parent direct (une branche d'un parent par exemple)
!!! Une chose à ne pas faire cependant est d'utiliser à
$rootScope.$on
partir d'un contrôleur.$rootScope
est l'application, lorsque votre contrôleur est détruit, cet écouteur d'événements existera toujours, et lorsque votre contrôleur sera de nouveau créé, il empilera simplement plus d'écouteurs d'événements. (Ainsi, une émission sera capturée plusieurs fois). Utilisez à la$scope.$on()
place, et les auditeurs seront également détruits.Quelle est la différence entre
$rootScope.$broadcast
&$rootScope.$broadcast.apply
?Parfois, vous devez utiliser
apply()
, en particulier lorsque vous travaillez avec des directives et d'autres bibliothèques JS. Cependant, comme je ne connais pas cette base de code, je ne pourrais pas dire si c'est le cas ici.la source
$rootScope.$on
fuite de mémoire. Cela s'applique également à la réponse acceptée, car les contrôleurs sont susceptibles d'appeler la réponsehiEventService
qu'il a créée.$broadcast
vs.$broadcast.apply()
$rootScope
fonctionne essentiellement comme un écouteur et un répartiteur d'événements.Pour répondre à la question de savoir comment il est utilisé, il est utilisé en conjonction avec
rootScope.$on
;Cependant, c'est une mauvaise pratique à utiliser
$rootScope
comme service d'événements général de votre propre application, car vous vous retrouverez rapidement dans une situation où chaque application dépend de $ rootScope et vous ne savez pas quels composants écoutent quels événements.La meilleure pratique consiste à créer un service pour chaque événement personnalisé que vous souhaitez écouter ou diffuser.
la source
hiEventService.listen(callback)
depuis un contrôleur, l'auditeur existera toujours même après la destruction du contrôleur. Fuite de mémoire! La liaison à la portée du contrôleur$scope.$on("hi",callback)
est fournie avec un nettoyage automatique.$ rootScope. $ broadcast est un moyen pratique de déclencher un événement "global" que toutes les portées enfants peuvent écouter. Vous devez uniquement l'utiliser
$rootScope
pour diffuser le message, car toutes les étendues descendantes peuvent l'écouter.La portée racine diffuse l'événement:
Tout enfant Scope peut écouter l'événement:
Pourquoi utilisons-nous $ rootScope. $ Broadcast? Vous pouvez utiliser
$watch
pour écouter les changements de variable et exécuter des fonctions lorsque l'état de la variable change. Toutefois, dans certains cas, vous souhaitez simplement déclencher un événement que d'autres parties de l'application peuvent écouter, quel que soit le changement d'état de la variable d'étendue. C'est là que cela$broadcast
est utile.la source
Passer des données !!!
Je me demande pourquoi personne ne mentionne qui
$broadcast
accepte un paramètre où vous pouvez passer unObject
qui sera reçu en$on
utilisant une fonction de rappelExemple:
la source
Que fait $ rootScope. $ Broadcast?
Il diffuse le message aux auditeurs respectifs dans toute l'application angulaire, un moyen très puissant de transférer des messages vers des étendues à différents niveaux hiérarchiques (que ce soit un parent, un enfant ou un frère ou une sœur)
De même, nous avons $ rootScope. $ Emit, la seule différence est que le premier est également capturé par $ scope. $ On tandis que le second est capturé par seulement $ rootScope. $ On.
voir des exemples: - http://toddmotto.com/all-about-angulars-emit-broadcast-on-publish-subscribing/
la source