$ broadcast不从服务中解雇(AngularJS)

ale*_*nst 2 javascript angularjs angularjs-scope

我正在尝试$rootScope从来自Socket.io的消息触发的服务广播消息.问题是,似乎$broadcast 没有解雇被解雇了,但我$on的控制器中没有触发.

我的代码看起来像:

factory("notifications", ["socket", "$rootScope", function(socket, $rootScope){
    return {

        socket.on("notification", function(data){

            $rootScope.$broadcast(data.something);

        }

    }
})
Run Code Online (Sandbox Code Playgroud)

而我的控制器:

controller('RandomCtrl', function($scope, $http, $location){

    function do_something(){

    }

    $scope.$on("some message from socket io", do_something);

});
Run Code Online (Sandbox Code Playgroud)

问题出在哪儿?

Bri*_*sio 6

应该工作.有些事情需要考虑(有些可能很明显,对不起):

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

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

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

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

  • 一定要喜欢它.我们可以在这些简单的事情上击败我们的大脑,这使我们开始质疑复杂的事物.您可以考虑查看Nodemon(http://remy.github.com/nodemon).当它注意到服务器文件中的更改时,它将重新启动服务器:) (2认同)