メソッドを使用して、$scope
オブジェクトをあるコントローラーから別のコントローラーに送信するにはどうすればよいでしょうか?.$emit
.$on
function firstCtrl($scope) {
$scope.$emit('someEvent', [1,2,3]);
}
function secondCtrl($scope) {
$scope.$on('someEvent', function(mass) { console.log(mass); });
}
思った通りに動作しません。どのように動作するのでしょう$emit
か$on
?
ベストアンサー1
まず、親子スコープ関係は重要です。イベントを発行するには 2 つの方法があります。
$broadcast
-- イベントをすべての子スコープに下向きに送信します。$emit
-- イベントをスコープ階層を通じて上方にディスパッチします。
コントローラー (スコープ) の関係については何も知りませんが、いくつかのオプションがあります。
のスコープがスコープ
firstCtrl
の親である場合、をでsecondCtrl
置き換えることでコードが機能するはずです。$emit
$broadcast
firstCtrl
function firstCtrl($scope) { $scope.$broadcast('someEvent', [1,2,3]); } function secondCtrl($scope) { $scope.$on('someEvent', function(event, mass) { console.log(mass); }); }
スコープ間に親子関係がない場合は、
$rootScope
コントローラーに挿入して、イベントをすべての子スコープ (つまりsecondCtrl
) にブロードキャストできます。function firstCtrl($rootScope) { $rootScope.$broadcast('someEvent', [1,2,3]); }
最後に、子コントローラーからスコープにイベントをディスパッチする必要がある場合は、 を使用できます
$scope.$emit
。 のスコープがスコープfirstCtrl
の親である場合secondCtrl
:function firstCtrl($scope) { $scope.$on('someEvent', function(event, data) { console.log(data); }); } function secondCtrl($scope) { $scope.$emit('someEvent', [1,2,3]); }