javascriptangularjsangularjs-scopeevent-listenerangular-broadcast

Angularjs $broadcast once, $on twice


It sends $broadcast once from the rootScope, but the listener ($on) gets called twice.

The listener is in a controller and it uses $rootScope.$on instead of $scope.$on. Has someone had this problem?

edit

rootScope:

$rootScope.$broadcast('menuActivateAction' + item.event_name_postfix, item.event_args);

other Controller:

$rootScope.$on('menuActivateActionPublish', function(event) {});

Solution

  • Since you register your $on listener on $rootScope, it doesn't get destroyed with the controller and next time you init the controller it gets created again.

    You should create your listener on controller scope

    $scope.$on('menuActivateActionPublish', function(event) {});