2016-07-18 5 views
1

//動作しないangular.jsで$上の私は//の$放送と$上を理解したいのブラウザで起こるコードは何も下に実行するが、コードが

<script src="http://ajax.googleapis.com/ajax/libs/angularjs/1.4.8/angular.min.js"></script> 
<script> 
    var app = angular.module("myApp", []) 
.controller("ParentCtrl", function firstCtrl($scope) 
{ 
    $scope.$broadcast('someEvent', [1,2,3]); 
}) 

.controller("ChildCtrl", function secondCtrl($scope) 
{ 
    $scope.$on('someEvent', function(event, mass) { console.log(mass); }); 
}); 

</script> 
助けてください動作していない場合には

HTML

<html> 
<div ng-app="myApp"> 
    <div ng-controller="ParentCtrl"> 
     <h2>Parent</h2> 
     <label ng-model="mass"/></label>  
     <hr/> 


     <div ng-controller="ChildCtrl"> 
      <h2>Child</h2> 
     <label ng-model="mass"/></label>   
    </div> 



</div> 

</html> 
+0

私の推測では、親コントローラが作成され、子コントローラが作成され、リスナが追加される前に*ブロードキャストが送信されています。 '$ timeout'でブロードキャストをラップしようとすると、' $ timeout(()=> $ scope。$ broadcast( 'someEvent'、[1,2,3])、1000) ' – Phil

+2

あなたは同期コードちょうどそれを$ scope変数に代入して子$スコープ – YOU

答えて

3

$broadcastはすべて登録子$スコープリスナーにイベントを送出します。

例では、$broadcastがParentCtrl定義内で呼び出され、リスナーがChildCtrl定義に登録されています。したがって、$broadcastが呼び出されるときには、アクティブなリスナーが登録されていません。

ボタンクリックでリスナーが登録された後に$broadcastを呼び出します。

あなたの例の作業用コードは次のとおりです。 https://plnkr.co/edit/GmA0GiLd5HVoykIi0FE4?p=info

+0

@ Kalyan..thanksに返信してください。しかし、ブロードキャストボタンをクリックせずにそれを行うにはどうすればいいですか?ボタンをクリックせずに値を入力します。 – MukulSharma

+0

@ Kalyan..i私はもう1つの疑問があります。なぜ、$ scope - $ scope.broadCasting = function()をクリックする必要がありますか? { $ scope。$ emit( 'someEvent'、[1,2,3 ]); \t}なぜ我々はvar broadCasting = function()のように書くことができません。 { $ scope。$ emit( 'someEvent'、[1,2,3]); \t} – MukulSharma