2012-09-30 11 views
8

이벤트를 통해 개체를 브로드 캐스팅하려면 어떻게해야합니까?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' 

을하지만 내가 일을 가지고 더 출력

편집 을 받고하지 오전 :

현재 내가 노력하고 있어요. 콜백 함수의 첫 번째 매개 변수가 범위 인 것 같습니다. 컨트롤러가 메시지을 받아 들일 준비가되기 전에 방송 때문에

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

답변

7

당신은 귀하의 경우에는 출력을 받고 있지 : 나는에 컨트롤러를 변경했다. 모듈의 run 메서드는 컨트롤러의 범위가 메시지를 청취 할 준비가되기 전에 응용 프로그램의 수명주기의 아주 초기에 실행됩니다./:

+1

http://jsfiddle.net/vPq2P/3/은 내가 [로드 유튜브의 iframe API (HTTPS 필요 비슷한 상황을 가지고 : 여기

이는, 청취자가 준비되기 전에 그 방송이 발생 확인하기 위해 콘솔을 확인 예시 jsFiddle입니다 /developers.google.com/youtube/iframe_api_reference#Getting_Started). 나는 run() 내부에로드 코드를 넣으려고 시도했다. 마지막으로로드하려고 시도했지만, 마지막으로로드하려고 시도했으나, 1000 이상의 타임 아웃을하지 않는 한 내 컨트롤러가 듣기 위해 준비되기 전에 방송이 항상 발생한다. (1500이 가장 잘 작동하는 것 같습니다). 타임 아웃을 사용하지 않고 적절한 순서의 청취 -> 방송을 보장 할 수있는 방법이 있습니까? 나는 나의 질문이 막연하게 보일지도 모른다는 것을 안다. 그러나 필요하다면 나는 더 자세한 내용을 제공 할 수있다. 감사. – braincomb

관련 문제