2016-06-15 8 views
0

サービスから複数のコントローラのデータを更新したい。 1つの選択肢は、$rootScopeにデータをブロードキャスト/送信することです。サービスから複数のコントローラのデータを更新する

何人ものリスナーが必要です。リスナーは同じイベントを聞いている人もあれば、他の人も聞いている人もいます。イベントは数秒ごとに発送されます。

私は、コールバックを使用してそれらを登録解除する可能性のある実用的なソリューションを作成しました。奇妙なことは、他の誰かが似たような解決法を使っているのを見ていないということです。このような理由があるかどうか疑問に思います。

サービス

var callbacks = {}; 
var idCounter = 0; 
function register(cb) { 
    var id = idCounter++; 
    callbacks[id] = cb; 

    return function() { 
    delete callbacks[id]; 
    }; 
} 

function send(data) { 
    for (var i in callbacks) { 
    callbacks[i](data); 
    } 
} 

コントローラ

var d = service.register(function(data) { 
    console.log(data); 
}); 

$scope.$destroy(function() { 
    d(); 
}); 

だから、私の質問があると思います:

  • 私は、この種のを使用してはならない理由を任意の理由がありますコールバックメカニズム。 (メモリリーク?)
  • 代わりにイベントを使うべきですか?このスケールではパフォーマンスは関係ありませんか?
  • 改善点?

答えて

0

イベントとディスパッチャーのコンセプトを再現します。使用してください! var d = ...(コントローラ内の)ポインタの関数スコープが削除されない場合、メモリリークが発生します。また、サービスでvar callbacksは醜いスライド効果です、この理由のために、イベントはクリーンカプセル化と総称サービスです!

関連する問題