1. ホーム
  2. angularjs

[解決済み] rootScope.$broadcast vs. $scope.$emit

2022-03-15 23:24:19

質問

との性能差はなくなりました。 $broadcast$emit が廃止されたのですが、何か理由があるのでしょうか? $scope.$emit から $rootScope.$broadcast ?

違いますね、はい。

$emit は、スコープ階層(上方)に制限されています。これは、デザインに合っていれば良いことかもしれませんが、私にはかなり恣意的な制限のように思えます。

$rootScope.$broadcast はすべてにおいて機能します。 選ぶ という制限の方が、より理にかなっていると思います。

何か見落としているのでしょうか?

EDITです。

回答を受けて明確にすると、ディスパッチの方向は私が追い求めている問題ではありません。 $scope.$emit はイベントを上向きにディスパッチし $scope.$broadcast - を下向きにします。しかし、なぜ常に $rootScope.$broadcast すべてのリスナーに届くようにするには?

どのように解決するのですか?

tl;dr (このtl;drは sp00m の回答)

<ブロッククオート

$emit は、イベントを上向きにディスパッチします ... $broadcast イベントを下方向に送出する

詳細説明

$rootScope.$emit は、他の $rootScope リスナーがそれをキャッチします。これは、すべての $scope を取得する。ほとんどがハイレベルなコミュニケーションです。子供に聞こえないように、大人同士が部屋で話しているようなものだと思ってください。

$rootScope.$broadcast は、かなり多くの人に聞こえるようにする方法です。これは、親が夕食の準備ができたと叫んで、家中の人に聞こえるようにするのと同じことです。

$scope.$emit は、その $scope とそのすべての親と $rootScope を聞くことができます。これは子供が家で親に愚痴をこぼすようなものです(ただし、他の子供に聞こえるようなスーパーではダメです)。

$scope.$broadcast が対象です。 $scope とその子供たち。これは子供がぬいぐるみにささやき、親に聞こえないようにするものです。