Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

$scope.$on not triggering after $rootScope.$broadcast in angular service

This may be the repeated question but the workaround I found for this issue is not working in my case thats why I am posting the question.

I've following service:

appRoot.service('MyService', function($rootScope) {
    var Messenger = {
        Temp: "",
        TempId:"",
        tempMethod: function(Id) {
            TempId = Id;
            $rootScope.$broadcast('FirstCtrlMethod');
        }
    };
    return Messenger ;
});

In second controller:

appRoot.controller('SecondCtrl', function ($scope, $location, MyResource, NotificationService, MyService) {
 $scope.invokeFirstCtrl= function() {
        var Id = '2';
        MyService.tempMethod(Id);
});

In first controller:

appRoot.controller('FirstCtrl', function ($scope, $compile, $filter, $modal, $sce, $location, NotificationService, MyService) {
$scope.$on('FirstCtrlMethod', function () {        
        alert('I am from frist controller');
    });
});

Problem: The line "$rootScope.$broadcast('FirstCtrlMethod');" is executing as expected but it is not causing to fire event "$scope.$on('FirstCtrlMethod', function () {.." in the first controller. I've used the differenct services in many places in my app in the same way and they are workig fine, I am not understanding why it is not working here.

like image 732
Saurabh Palatkar Avatar asked Nov 04 '14 05:11

Saurabh Palatkar


1 Answers

putting comment as an answer...

I guess the other controller which is supposed to receive the event is not yet instatiated when you are $broadcasting the event.

Please try instantiating the other controller

like image 158
harishr Avatar answered Oct 11 '22 07:10

harishr