Javascript 如何在Angularjs中广播对象?

Javascript 如何在Angularjs中广播对象?,javascript,angularjs,Javascript,Angularjs,如何通过事件广播对象 目前我正在尝试: app.run ($rootScope) -> message = {type: 'channel', action: 'create', data: { name: "ssss", id: 0}} $rootScope.$broadcast('message', message) angular.module('WebChat').controller 'ChannelController', ($scope) ->

如何通过事件广播对象

目前我正在尝试:

app.run ($rootScope) ->
    message = {type: 'channel', action: 'create', data: { name: "ssss", id: 0}}
    $rootScope.$broadcast('message', message)

angular.module('WebChat').controller 'ChannelController', ($scope) -> 
    $scope.$on 'message', (message) ->
        console.log message
        console.log 'hi'
但我没有得到任何输出

编辑 我让它工作了。回调函数的第一个参数似乎是作用域。我必须将控制器更改为:

angular.module('WebChat').controller 'ChannelController', ($scope) -> 
    $scope.$on 'message', (scope, message) ->
        console.log message
        console.log 'hi'

在您的情况下,您没有得到任何输出,因为您在控制器准备接受消息之前进行了广播。模块的run方法在应用程序生命周期的早期执行,在控制器的作用域准备好侦听消息之前执行


下面是一个演示了这一点的JSFIDLE,请检查控制台以查看广播是否在侦听器准备就绪之前发生:

我有一个类似的情况,我需要这样做。我曾尝试将加载代码放入run()内部,也尝试将加载代码最后装入外部,但无论我将其放入何处,广播总是在我的控制器准备好收听之前进行,除非我超时1000或更多(1500似乎效果最好)。有没有一种方法可以保证在不使用超时的情况下进行正确的顺序收听->广播?我知道我的问题似乎有点宽泛,但如果需要,我可以提供更多细节。谢谢