2012-09-30 29 views
8

Come posso trasmettere un oggetto attraverso un evento?Come posso trasmettere un oggetto in Angularjs?

Attualmente sto provando:

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' 

Ma sto ottenendo alcuna uscita

Edit ho capito di lavoro. Sembra che il primo parametro della funzione di callback sia l'ambito. Ho dovuto cambiare il controller per:

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

risposta

7

hai trovato nessuna uscita nel vostro caso, poiché si è trasmissione prima di un controller è pronto ad accettare i messaggi. Il metodo di esecuzione del modulo viene eseguito molto presto nel ciclo di vita dell'applicazione, prima che gli ambiti del controllore siano pronti ad ascoltare i messaggi.

Ecco la jsFiddle che illustra questo, controllare la console per vedere che la trasmissione avviene prima che un ascoltatore è pronto: http://jsfiddle.net/vPq2P/3/

+1

Ho una situazione simile, in cui ho bisogno di [carico YouTube IFrame API] (https://developers.google.com/youtube/iframe_api_reference#Getting_Started). Ho provato a inserire il codice di caricamento dentro run() e all'esterno cercando di caricarlo per ultimo, ma non importa dove lo metto, la trasmissione avviene sempre prima che il mio controller sia pronto per l'ascolto, a meno che non esegua un timeout di 1000 o più (1500 sembra funzionare meglio). C'è un modo per garantire una corretta lista degli ordini-> trasmesso senza utilizzare i timeout? So che la mia domanda può sembrare vagamente ampia, ma posso fornire maggiori dettagli se necessario. Grazie. – braincomb

Problemi correlati