Ответ 1
сдача комментария в качестве ответа...
Я предполагаю, что другой контроллер, который должен получить событие, еще не установлен, когда вы передаете событие $.
Попробуйте создать экземпляр другого контроллера.
Это может быть повторяющийся вопрос, но обходной путь, который я нашел для этой проблемы, не работает в моем случае, поэтому я отправляю вопрос.
Я следую за службой:
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() {.." в первом контроллере. Я использовал разные услуги во многих местах в своем приложении таким же образом, и они отлично работают, я не понимаю, почему он здесь не работает.
сдача комментария в качестве ответа...
Я предполагаю, что другой контроллер, который должен получить событие, еще не установлен, когда вы передаете событие $.
Попробуйте создать экземпляр другого контроллера.
См. ниже рабочий пример
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>