2012-09-30 10 views
8

Jak mogę transmitować obiekt poprzez wydarzenie?Jak mogę transmitować obiekt w Angularjs?

Obecnie próbuję:

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' 

Ale ja dostaję żadnego wyjścia

Edycja mam to działa. Wydaje się, że pierwszym parametrem funkcji wywołania zwrotnego jest zasięg. Musiałem zmienić kontroler:

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

Odpowiedz

7

Otrzymujesz żadnego wyjścia w Twoim przypadku, ponieważ jesteś nadawanie przed sterownik jest gotowy do przyjęcia wiadomości. Metoda uruchamiania modułu jest wykonywana bardzo wcześnie w cyklu życia aplikacji, zanim zasięgi kontrolerów są gotowe do odsłuchania wiadomości.

Oto jsFiddle który ilustruje to, sprawdź konsolę, aby zobaczyć, że transmisja dzieje się przed słuchaczem jest gotowe: http://jsfiddle.net/vPq2P/3/

+1

Mam podobną sytuację, gdy trzeba [obciążenia YouTube IFrame API] (https://developers.google.com/youtube/iframe_api_reference#Getting_Started). Próbowałem umieścić kod obciążenia wewnątrz run(), a także na zewnątrz, próbując załadować go jako ostatni, ale bez względu na to, gdzie go umieszczam, transmisja zawsze ma miejsce, zanim mój kontroler będzie gotowy do słuchania, chyba że wykonam limit czasu wynoszący 1000 lub więcej (1500 wydaje się działać najlepiej). Czy istnieje sposób zagwarantowania prawidłowej kolejności słuchania-> emisji bez wykorzystania limitów czasu? Wiem, że moje pytanie może wydawać się dość ogólne, ale w razie potrzeby mogę podać więcej szczegółów. Dzięki. – braincomb

Powiązane problemy