Comprendre $scope.$emit et $scope.$on pour la communication d'événements dans AngularJS
AngularJS fournit un mécanisme de communication d'événements flexible utilisant $ méthodes scope.$emit et $scope.$on. Ces méthodes facilitent le transfert de données entre les contrôleurs, vous permettant de créer des applications réactives et dynamiques.
Comme mentionné dans le message d'origine, le problème provient d'une mauvaise compréhension du fonctionnement de $emit et $on. La clé réside dans la compréhension du concept de relation de portée parent-enfant.
Relation de portée parent-enfant
Dans AngularJS, les portées sont organisées dans une hiérarchie arborescente, où chaque portée est soit un parent, soit un enfant d'une autre portée. Cette relation détermine la façon dont les événements sont propagés à travers la hiérarchie de portée.
Émission d'événements
Il existe deux méthodes principales pour émettre des événements dans AngularJS : $broadcast et $emit.
Écouter Événements
Pour écouter les événements, vous pouvez utiliser la méthode $on. Il prend deux paramètres : le nom de l'événement et une fonction de rappel qui sera exécutée lorsque l'événement sera déclenché.
Scénarios d'utilisation de $emit et $on
Basés sur votre exemple et la notion de relation de portée parent-enfant, voici plusieurs scénarios possibles :
Scénario 1 : Relation parent-enfant
Si la portée de firstCtrl est un parent de la portée secondCtrl, le code de votre exemple devrait fonctionner en remplaçant $emit par $broadcast dans firstCtrl :
function firstCtrl($scope) { $scope.$broadcast('someEvent', [1, 2, 3]); } function secondCtrl($scope) { $scope.$on('someEvent', function(event, mass) { console.log(mass); }); }
Scénario 2 : Pas de relation parent-enfant
S'il n'y a pas relation parent-enfant entre les étendues, vous pouvez injecter $rootScope dans le contrôleur et diffuser l'événement à toutes les étendues enfants, y compris secondCtrl :
function firstCtrl($rootScope) { $rootScope.$broadcast('someEvent', [1, 2, 3]); }
Scénario 3 : émission de l'enfant au parent
Enfin, si vous devez envoyer un événement depuis un contrôleur enfant vers des étendues ascendantes, vous pouvez utiliser $scope.$emit. Si la portée de firstCtrl est un parent de la portée secondCtrl :
function firstCtrl($scope) { $scope.$on('someEvent', function(event, data) { console.log(data); }); } function secondCtrl($scope) { $scope.$emit('someEvent', [1, 2, 3]); }
En comprenant la relation de portée parent-enfant et le fonctionnement de $emit et $on, vous pouvez exploiter efficacement les événements pour établir une communication entre les contrôleurs dans Applications AngularJS.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!