2

我正在尝试从$rootScope来自 Socket.io 的消息触发的服务中广播消息。问题是,似乎$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);

});

问题出在哪里?

4

1 回答 1

6

应该有效。需要考虑的一些事情(有些可能很明显,抱歉):

  1. 你确定data.something和“来自socket io的一些消息”是完全相同的字符串吗?

  2. 这可能是时间问题吗?是否有可能在控制器注册处理程序之前发送消息$on

  3. 此控制器是否在具有隔离范围的指令内?我不确定隔离范围是否来自$rootScope.

  4. 当您注入$rootScope控制器并尝试时会发生什么$rootScope.$on?这根本不需要,但它可能有助于调试您的问题。

于 2013-09-09T10:13:54.763 回答