2016-09-28 11 views
0

この厄介なバグが発生し、データをディレクティブにブロードキャストしますが、ディレクティブの$onは受信しません。ブロードキャスト後にディレクティブデータが表示されない場合があります

したがって、私のテーブルには何も表示されず、ユーザーにとってはひどいものです。

<div> 
    <h1>Test Results</h1> 
    ... 
    <results></results> 
</div> 

resultsCtrl.jsコントローラ:

$timeout(function() { 
    $rootScope.$broadcast('show-results', test_session.question_objects); 
}, 100); 

results.html指示テンプレート(取り除か最もフィールド):

test_results.htmlは(ディレクティブのインスタンスを含みます)

<div class="results"> 
    <table class="table table-bordered table-striped"> 
     <thead> 
      <tr> 
       <td ng-if="average_times && !$root.is_mobile"> 
        <span ng-click="sortType = 'question.average_timing'; sortReverse = !sortReverse"> 
         Avg. Time 
        </span> 
       </td> 
      </tr> 
     </thead> 
     <tbody> 
      <tr ng-repeat="q in questions | orderBy:sortType:sortReverse | filter:searchQuestions track by $index"> 
       <td ng-if="q.average_timing && !$root.is_mobile" ng-click="$root.openDirections('question', q)">{{ q.average_timing }}</td> 
      </tr> 
     </tbody> 

    </table> 
</div> 

results.js指示:

scope.$on('show-results', function(event, test_session) { 
    setTestSessionData(test_session); 
}); 
... 
function setTestSessionData (test_session) { 
    scope.questions = test_session; 
} 

正確にこれが起こるのはいつかわかりません。最初はサイトを初めて読み込むと思っていましたが、それ以来、データをレンダリングしました。

答えて

0

$rootScope.$broadcastを実行するたびに、$scope.$onでそれらのイベントに登録したすべての子スコープがイベントを捕捉します。ディレクティブのスコープも同じです。イベントリスナーでモデルを更新すると、そのモデルはビューで更新されます。

の作業plunker:https://plnkr.co/edit/4iokGsfPH5IqNdecjaGd?p=preview

+0

ですから、本当にここ異なっやっている唯一のものは、ディレクティブに親の結果を結合さ: '<結果が得るデータ=「親(結果)」>'そして '結果: '&' '私は、これがデータが '$ on'で受信されていることをどうやって混同していますか? '$ on'はすでに購読している放送を聞いてはいけませんか? – Growler

+0

バインディング部分を無視して、親コントローラからのブロードキャストを行うたびに、唯一のことを覚えておいてください。ローカルスコープ –

+0

ササンクで$で聴いています。私が行ったスコープの違いとあなたがやったことと、あなたの方法でいつもコンテンツがロードされていることを確認するのはなぜですか? – Growler

関連する問題