我有一个触发自定义模式的按钮(我使用了此处的模态http://codepen.io/m-e-conroy/pen/ALsdF)
该按钮位于MainController
控制器中。
app.controller('MainController', function($scope, sharedService) {
$dialogs.create('dialog.html', 'SecondController',
{}, {key: false, back: 'static'});
// Start broadcast
sharedService.prepForBroadcast('Hello AngularJS');
});
app.controller('SecondController', function($scope, sharedService) {
// This piece of code doesn't get called.
$scope.$on('handleBroadcast', function() {
console.log('received broadcast');
});
});
app.factory('sharedService', function($rootScope) {
var data = {message: ''};
data.prepForBroadcast = function(message) {
this.message = message;
$rootScope.$broadcast('handleBroadcast');
};
return data;
});
我的问题是:在SecondController
中,为什么它不听广播?为什么这段代码(在上面的SecondController
中注释)永远不会被执行?
答案 0 :(得分:1)
在第二个控制器中使用 $ rootScope.on 而非 $ scope.on 。
服务正在改变rootcope而不是第二个控制器范围。
答案 1 :(得分:0)
我只是对您的示例进行了简单的设置,一切似乎都有效,所以您的代码中必须有其他内容。
使用您的代码的工作示例: http://jsbin.com/rosutoya/2/edit
您是否有可能因为您的网页实际上没有2台控制器正在运行而未能看到您的期望?