Why do we use $rootScope.$broadcast in AngularJS?

ghz 1years ago ⋅ 4107 views

Question

Tried to find some basic information for AngularJS $rootScope.$broadcast, But the AngularJS documentation doesn't help much. In easy words why do we use this?

Also, inside John Papa's [Hot Towel](http://www.johnpapa.net/hot-towel- angular/) template there is a custom function in the common module named $broadcast:

function $broadcast() {
    return $rootScope.$broadcast.apply($rootScope, arguments);
}

I did not understand what this is doing. So here are couple of basic questions:

  1. What does $rootScope.$broadcast do?

  2. What is the difference between $rootScope.$broadcast and $rootScope.$broadcast.apply?


Answer

  1. What does $rootScope.$broadcast do?

$rootScope.$broadcast is sending an event through the application scope. Any children scope of that app can catch it using a simple: $scope.$on().

It is especially useful to send events when you want to reach a scope that is not a direct parent (A branch of a parent for example)

!!! One thing to not do however is to use $rootScope.$on from a controller. $rootScope is the application, when your controller is destroyed that event listener will still exist, and when your controller will be created again, it will just pile up more event listeners. (So one broadcast will be caught multiple times). Use $scope.$on() instead, and the listeners will also get destroyed.

  1. What is the difference between $rootScope.$broadcast & $rootScope.$broadcast.apply?

Sometimes you have to use apply(), especially when working with directives and other JS libraries. However since I don't know that code base, I wouldn't be able to tell if that's the case here.