2012-09-30 30 views
8

¿Cómo puedo transmitir un objeto a través de un evento?¿Cómo puedo transmitir un objeto en Angularjs?

Actualmente estoy tratando:

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' 

Pero estoy recibiendo ninguna salida

Editar Lo tengo trabajo. Parece que el primer parámetro de la función de devolución de llamada es el alcance. Tenía que cambiar el controlador para:

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

Respuesta

7

vas a encontrar ninguna salida en su caso, ya que son radiodifusión antes de que un controlador está listo para aceptar mensajes. El método de ejecución del módulo se ejecuta muy temprano en el ciclo de vida de la aplicación, antes de que los ámbitos del controlador estén listos para escuchar los mensajes.

Aquí es el jsFiddle que ilustra este, compruebe la consola para ver esa transmisión ocurre antes de que un oyente está listo: http://jsfiddle.net/vPq2P/3/

+1

que tienen una situación similar, donde necesito [carga de YouTube IFrame API] (https://developers.google.com/youtube/iframe_api_reference#Getting_Started). Intenté poner el código de carga dentro de run() y fuera tratando de cargarlo al final, pero no importa dónde lo coloque, la transmisión siempre ocurre antes de que mi controlador esté listo para escuchar, a menos que haga un tiempo de espera de 1000 o más (1500 parece funcionar mejor). ¿Hay alguna forma de garantizar el orden correcto para escuchar-> emitir sin usar tiempos de espera? Sé que mi pregunta puede parecer vagamente amplia, pero puedo proporcionar más detalles si es necesario. Gracias. – braincomb

Cuestiones relacionadas