$scope.$emit と $scope.$on の操作 質問する

$scope.$emit と $scope.$on の操作 質問する

メソッドを使用して、$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-- イベントをスコープ階層を通じて上方にディスパッチします。

コントローラー (スコープ) の関係については何も知りませんが、いくつかのオプションがあります。

  1. のスコープがスコープfirstCtrlの親である場合、をでsecondCtrl置き換えることでコードが機能するはずです。$emit$broadcastfirstCtrl

    function firstCtrl($scope)
    {
        $scope.$broadcast('someEvent', [1,2,3]);
    }
    
    function secondCtrl($scope)
    {
        $scope.$on('someEvent', function(event, mass) { console.log(mass); });
    }
    
  2. スコープ間に親子関係がない場合は、$rootScopeコントローラーに挿入して、イベントをすべての子スコープ (つまりsecondCtrl) にブロードキャストできます。

    function firstCtrl($rootScope)
    {
        $rootScope.$broadcast('someEvent', [1,2,3]);
    }
    
  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]);
    }
    

おすすめ記事