$scope object
あるコントローラーから別のコントローラーに送信するには、最もよく使用される$rootScope.$broadcast
と$rootScope.$emit
ここで説明します。
ケース 1 :
$rootScope.$broadcast:-
$rootScope.$broadcast('myEvent',$scope.data);//Here `myEvent` is event name
$rootScope.$on('myEvent', function(event, data) {} //listener on `myEvent` event
$rootScope
リスナーは自動的に破棄されません。を使用して破壊する必要があります$destroy
。$scope.$on
リスナー$scope
は自動的に破棄されるため、つまり $scope が破棄されるとすぐに使用することをお勧めします。
$scope.$on('myEvent', function(event, data) {}
または、
var customeEventListener = $rootScope.$on('myEvent', function(event, data) {
}
$scope.$on('$destroy', function() {
customeEventListener();
});
ケース 2:
$rootScope.$emit:
$rootScope.$emit('myEvent',$scope.data);
$rootScope.$on('myEvent', function(event, data) {}//$scope.$on not works
$emit と $broadcast の主な違いは、$rootScope.$on を使用して $rootScope.$emit イベントをリッスンする必要があることです。これは、発行されたイベントがスコープ ツリーを通過することがないためです。.
この場合も、$broadcast の場合と同様にリスナーを破棄する必要があります。
編集:
$rootScope.$broadcast + $scope.$on
私は使うのではなく使うのが
好き$rootScope.$emit+ $rootScope.$on
です。コンボは、$rootScope.$broadcast +
$scope.$on
深刻なパフォーマンスの問題を引き起こす可能性があります。これは、イベントがすべてのスコープでバブル ダウンするためです。
編集2:
この回答で対処されている問題は、angular.js バージョン 1.2.7 で解決されています。$broadcast は、未登録のスコープでのバブリングを回避し、$emit と同じ速度で実行されるようになりました。