Подтвердить что ты не робот

$ scope. $не запускается после $rootScope. $broadcast в службе angular

Это может быть повторяющийся вопрос, но обходной путь, который я нашел для этой проблемы, не работает в моем случае, поэтому я отправляю вопрос.

Я следую за службой:

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

В втором контроллере:

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

В первом контроллере

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

Проблема: Линия "$ rootScope. $broadcast (" FirstCtrlMethod "); выполняется, как и ожидалось, но не вызывает событие пожара" $scope. $on ( "FirstCtrlMethod", function() {.." в первом контроллере. Я использовал разные услуги во многих местах в своем приложении таким же образом, и они отлично работают, я не понимаю, почему он здесь не работает.

4b9b3361

Ответ 1

сдача комментария в качестве ответа...

Я предполагаю, что другой контроллер, который должен получить событие, еще не установлен, когда вы передаете событие $.

Попробуйте создать экземпляр другого контроллера.

Ответ 2

См. ниже рабочий пример

var app = angular.module('app', []);

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

app.controller('homeCtrl', function($scope, MyService) {

  $scope.invokeFirstCtrl = function() {
    var Id = '2';
    MyService.tempMethod(Id);

  };
});

app.controller('FirstCtrl', function($scope) {

  $scope.$on('FirstCtrlMethod', function() {
    alert('I am from frist controller');
  });
});
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.2.23/angular.min.js"></script>
<div ng-app="app">
  <div ng-controller="homeCtrl">

    <button ng-click="invokeFirstCtrl()">Invoke</button>
  </div>

  <div ng-controller="FirstCtrl">


  </div>
</div>