AngularJS $rootScope.$broadcast
の基本的な情報を見つけようとしましたが、AngularJSのドキュメントはあまり役に立ちません。簡単に言うと、なぜこれを使用するのですか。
また、John Papaの Hot Towel テンプレートの中には、共通モジュールの$broadcast
という名前のカスタム関数があります。
function $broadcast() {
return $rootScope.$broadcast.apply($rootScope, arguments);
}
私はこれが何をしているのか理解できませんでした。だからここにいくつかの基本的な質問があります:
1)$rootScope.$broadcast
は何をするのですか?
2)$rootScope.$broadcast
と$rootScope.$broadcast.apply
の違いは何ですか?
$rootScope.$broadcast
は何をしますか?
$rootScope.$broadcast
はアプリケーションスコープを通じてイベントを送信しています。そのアプリのどの子供の範囲でも、単純な$scope.$on()
を使ってそれをキャッチすることができます。
直接の親ではないスコープ(たとえば、親のブランチ)に到達したいときにイベントを送信すると特に便利です。
!!! しないでくださいすることの一つはコントローラから$rootScope.$on
を使うことです。 $rootScope
はアプリケーションです。あなたのコントローラが破壊されてもそのイベントリスナはまだ存在します、そしてあなたのコントローラが再び作成されるときそれはただもっと多くのイベントリスナを積み上げるでしょう。 (つまり、1回の放送が複数回キャッチされます)。代わりに$scope.$on()
を使用すると、リスナーも破棄されます。
$rootScope.$broadcast
と$rootScope.$broadcast.apply
の違いは何ですか?
特にディレクティブや他のJSライブラリを扱うときは、apply()
を使わなければならないことがあります。しかし、そのコードベースがわからないので、それがここに当てはまるかどうかを判断することはできません。
$rootScope
は基本的にイベントリスナーおよびディスパッチャーとして機能します。
それがどのように使われているかという質問に答えるために、それはrootScope.$on
と一緒に使われました。
$rootScope.$broadcast("hi");
$rootScope.$on("hi", function(){
//do something
});
ただし、すべてのアプリが$ rootScopeに依存していて、どのコンポーネントがどのイベントをリッスンしているのかわからないため、$rootScope
を自分のアプリの一般的なイベントサービスとして使用することはお勧めできません。
ベストプラクティスは、視聴またはブロードキャストしたいカスタムイベントごとにサービスを作成することです。
.service("hiEventService",function($rootScope) {
this.broadcast = function() {$rootScope.$broadcast("hi")}
this.listen = function(callback) {$rootScope.$on("hi",callback)}
})
$ rootScope。$ broadcastは、すべての子スコープがリスンできる "グローバル"イベントを発生させる便利な方法です。すべての子孫スコープはメッセージをリスンできるので、メッセージをブロードキャストするには$rootScope
を使用するだけで済みます。
ルートスコープはイベントをブロードキャストします。
$rootScope.$broadcast("myEvent");
どの子スコープでもイベントをリッスンできます:
$scope.$on("myEvent",function () {console.log('my event occurred');} );
なぜ私たちは$ rootScopeを使用します。$ broadcast?変数の変化を監視し、変数の状態が変化したときに関数を実行するために$watch
を使用することができます。ただし、場合によっては、スコープ変数の状態の変化に関係なく、単にアプリケーションの他の部分がリスンできるイベントを発生させるだけです。 $broadcast
が役に立つ時です。
$broadcast
がコールバック関数を使って受け取ることができるObject
を渡すことができるパラメータを$on
が受け取ることに誰も言及していないのはなぜだろうか
例:
// the object to transfert
var myObject = {
status : 10
}
$rootScope.$broadcast('status_updated', myObject);
$rootScope.$on('status_updated', function(event, obj){
console.log(obj.status); // 10
})
$ rootScope。$ broadcastは何をしますか?
これは、角度のあるアプリケーション全体でそれぞれのリスナーにメッセージをブロードキャストします。これは、メッセージをさまざまな階層レベル(親、子、兄弟など)のスコープに転送するための非常に強力な手段です。
同様に、$ rootScope。$ emitがありますが、唯一の違いは前者が$ scope。$ onで捕捉されるのに対し、後者は$ rootScope。$ onで捕捉されるだけです。
例を参照してください。 - http://toddmotto.com/all-about-angulars-emit-broadcast-on-publish-subscribing/