我正在尝试从来自Socket.io的消息触发的服务中广播来自$rootScope
的消息。
问题是似乎$broadcast
未被触发被触发,但我的控制器中的$on
未被触发。
我的代码如下:
factory("notifications", ["socket", "$rootScope", function(socket, $rootScope){
return {
socket.on("notification", function(data){
$rootScope.$broadcast(data.something);
}
}
})
我的控制员:
controller('RandomCtrl', function($scope, $http, $location){
function do_something(){
}
$scope.$on("some message from socket io", do_something);
});
问题出在哪里?
答案 0 :(得分:6)
此应该有效。有些事情要考虑(有些可能很明显,对不起):
您确定data.something
和“套接字io中的某些消息”是完全相同的字符串吗?
这可能是时间问题吗?在控制器注册$on
处理程序之前是否可能发送消息?
此控制器是否在具有隔离范围的指令中?我不确定隔离范围是否来自$rootScope
。
将$rootScope
注入控制器并尝试使用$rootScope.$on
时会发生什么?这根本不是必需的,但它可能有助于调试您的问题。