2016-04-30 12 views
4

ブロードキャストイベントの前にブロードキャストリスナーが設定されていない場合に、どのように対処するかに関するヒントを教えてください。ブロードキャストイベントの前にブロードキャストリスナーが設定されていません

私は$タイムアウトでいくつかの解決策を見たことがありますが、OKとは感じません。ありがとう!例の作業

var app = angular.module('app', []); 

app.controller('ParentCtrl', 
    function ParentCtrl ($scope) { 
    this.data = 'parent'; 
    $scope.$broadcast('parent', 'Some data'); // event is sent before any listeners are set 
}); 

app.controller('ChildCtrl', 
    function SiblingOneCtrl ($scope) { 
    this.data = 'child'; 
    $scope.$on('parent', function (event, data) { 
     document.write(data); // never activates 
    }); 
}); 

:あなたのケースでは http://codepen.io/AndriusRimkus/pen/zqMONm

答えて

1

を、あなたは常にすべてのリスナーが登録される前に放送しようとします。

ParentCtrlは常にChildCtrlの前に初期化するためです。 コンストラクタのようなコントローラを見てみてください。

子どものコントローラに何をブロードキャストするかを指定する場合は、手動でブロードキャストを開始するためにいくつかのイベント(クリックなど)が必要ですが、直接コントローラからは送信されません。

関連する問題