![](/img/trans.png)
[英]Testing if callback have been called using $rootScope.$broadcast and $scope.$on
[英]$scope.$on not triggering after $rootScope.$broadcast in angular service
這可能是重復的問題,但我發現這個問題的解決方法在我的情況下不起作用,這就是我發布問題的原因。
我有以下服務:
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>
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.