2014-11-04 3 views
12

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

Я следующий сервиса:

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() {.." в первом контроллере. Я использовал различные услуги во многих местах в мое приложение таким же образом, и они workig хорошо, я не понимая, почему он не работает здесь.

+1

оба контроллера экземпляра при тестировании это ?? – harishr

+0

Вы пробовали '$ emit' вместо' $ broadcast'? или просто '$ rootScope. $ on' – Dylan

+0

Я пробовал оба. $ emit и $ rootScope. $, но все еще не работает –

ответ

14

положить комментарий в ответ ...

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

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

+5

как установить этот контроллер? –

+1

@satishkumarV Вам просто нужно убедиться, что ваш контроллер находится внутри директивы вашего приложения («ng-app»), и все было правильно связано. Например, 'app.controller ('FirstCtrl', FirstCtrl)' и т. Д. – MirroredFate

1

Пожалуйста, смотрите ниже рабочего примера

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>

+0

не работает полностью – LKM

Смежные вопросы