New Dev New Dev - 1 year ago 173
AngularJS Question

$rootScope.$broadcast vs. $scope.$emit

Now that the performance difference between

has been eliminated, is there any reason to prefer

They are different, yes.

is restricted to the scope hierarchy (upwards) - this may be good, if it fits your design, but it seems to me a rather arbitrary restriction.

works across all that choose to listen to the event, which is a more sensible restriction in my mind.

Am I missing something?


To clarify in response to an answer, the direction of the dispatch is not the issue I'm after.
dispatches the event upwards, and
- downwards. But why not always use
to reach all the intended listeners?

Answer Source

$rootScope.$emit only lets other $rootScope listeners catch it. This is good when you don't want every $scope to get it. Mostly a high level communication. Think of it as adults talking to each other in a room so the kids can't hear them.

$rootScope.$broadcast is a method that lets pretty much everything hear it. This would be the equivalent of parents yelling that dinner is ready so everyone in the house hears it.

$scope.$emit is when you want that $scope and all its parents and $rootScope to hear the event. This is a child whining to their parents at home (but not at a grocery store where other kids can hear).

$scope.$broadcast is for the $scope itself and its children. This is a child whispering to its stuffed animals so their parents can't hear.


$emit dispatches an event upwards ... $broadcast dispatches an event downwards

Recommended from our users: Dynamic Network Monitoring from WhatsUp Gold from IPSwitch. Free Download