角度コントローラーがリッスンできるイベントをブロードキャストするために、非角度コード (この場合は Facebook および Twitter JS SDK) が必要なシナリオがあります。なんで?最初のページの読み込み後、AJAX を介してページのコンテンツを読み込んで修正します。コンテンツには、複数のいいね/ツイート ボタンが添付されています (ブログ/アグリゲーターのフロント ページのように)。Facebookの「いいね」ボタンまたはTwitterの「共有」ボタンのいずれかでクリックが発生したときにイベントフックを追加したいと思います.ページにはそれらのいくつかがあり、新しいコンテンツが取得されるたびにそれぞれが変更されます(これもajax経由) )。
現在、SDK はこれを別の方法で処理します。
ツイッター
twttr.events.bind('click', function(event){
// here I'd like to somehow
// $rootScope.$broadcast("twitter:clicked", event.currentTarget)
});
フェイスブック
FB.Event.subscribe("edge.create", function(resp) {
// here I'd like to somehow
// $rootScope.$broadcast("facebook:clicked", resp)
});
いくつかのコントローラー
app.controller("SomeController", ['$scope', function($scope) {
$scope.$on("facebook:clicked", function(event, resp) {
// do something with resp
});
$scope.$on("twitter:clicked", function(event, target) {
// do something target
});
}])
新しいコンテンツがフェッチされるたびにこれらのコントローラーが再作成される場合でも、これらのイベント ハンドラーを一度バインドしてから、関連するコントローラーでブロードキャストされたメッセージを処理するという考え方です。
基本的に、私が探しているのは、アプリの一部ではないにもかかわらず、既存の既に初期化された角度のあるアプリ$rootScope
とメッセージにフックする方法です。$broadcast
これが理にかなっていることを願っています。ありがとう。