如何在Angularjs中广播对象?

use*_*761 8 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) -> 
    $scope.$on 'message', (message) ->
        console.log message
        console.log 'hi'
Run Code Online (Sandbox Code Playgroud)

但我没有输出

编辑 我得到了它的工作.似乎回调函数的第一个参数是范围.我不得不将控制器更改为:

angular.module('WebChat').controller 'ChannelController', ($scope) -> 
    $scope.$on 'message', (scope, message) ->
        console.log message
        console.log 'hi'
Run Code Online (Sandbox Code Playgroud)

pko*_*rce 7

由于您在控制器准备好接受消息之前进行广播,因此您的案例中没有输出.在控制器的作用域准备好收听消息之前,模块的run方法在应用程序的生命周期的早期执行.

以下是说明这一点的jsFiddle,检查控制台,看看广播是在听众准备好之前发生的:http://jsfiddle.net/vPq2P/3/