Maison > interface Web > js tutoriel > Comment `$scope.$emit` et `$scope.$on` facilitent-ils la communication d'événements dans AngularJS ?

Comment `$scope.$emit` et `$scope.$on` facilitent-ils la communication d'événements dans AngularJS ?

Susan Sarandon
Libérer: 2024-12-21 00:24:09
original
565 Les gens l'ont consulté

How Do `$scope.$emit` and `$scope.$on` Facilitate Event Communication in AngularJS?

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.

  • $broadcast : Diffuse l'événement vers le bas à tous les enfants scopes dans la hiérarchie de la scope actuelle.
  • $emit : Propage l'événement vers le haut dans la hiérarchie des scopes, atteignant les scopes parents.

É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); });
}
Copier après la connexion

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]);
}
Copier après la connexion

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]);
}
Copier après la connexion

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!

source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal