2017-05-18 5 views
0

$scope.broadcast$scope.$onを別のコントローラーに入れることはできますか?私は一度テキストを入力すると、データは検索の責任を持つコントローラーに送られます。私は$scope.broadcast$scope.$onを使ってデータを転送することをお勧めします。ところで、私はインターンです...ありがとう。

+0

これを達成するには、 '$ rootScope.on'と' $ scope.emit'を使用できます。 –

答えて

0

はい、もちろんです! $ scopeを使用する$ emitは、$ scopeの上にあるイベントを発生させます。 $ scope。$ broadcastを使用すると$ scopeのイベントが発生します。 $ scope。$ onを使用すると、これらのイベントをリスンする方法です。

親スコープと子スコープをエミュレートする最も簡単な方法は、コントローラを使用することです。

<div ng-controller="ParentCtrl as parent" class="ng-scope"> 
    {{ parent.data }} 
    <div ng-controller="SiblingOneCtrl as sib1" class="ng-scope"> 
     {{ sib1.data }} 
    </div> 
</div> 

我々は$放送を使ってSiblingOneCtrlまでParentCtrlからイベントを発生できます:

app.controller('ParentCtrl', 
    function ParentCtrl ($scope) { 

    $scope.$broadcast('parent', 'Some data'); // going down! 

}); 

app.controller('SiblingOneCtrl', 
    function SiblingOneCtrl ($scope) { 

    $scope.$on('parent', function (event, data) { 
    console.log(data); // 'Some data' 
    }); 

}); 
各コントローラには、角度がきちんと私たちのために、新たにスコープ要素にNG-スコープクラスを出力新しい$スコープを作成します

SiblingOneCtrlからParentCtrlまで上向きに通信したいと思ったら、あなたはそれを推測しました。$ emitを使うことができます。

app.controller('ParentCtrl', 
    function ParentCtrl ($scope) { 

    $scope.$on('child', function (event, data) { 
    console.log(data); // 'Some data' 
    }); 

}); 

app.controller('SiblingOneCtrl', 
    function SiblingOneCtrl ($scope) { 

    $scope.$emit('child', 'Some data'); // going up! 

}); 
+0

ありがとうございます。しかし、コントローラが同じファイルにない場合も可能ですか? –

+0

はい、同じファイルではなくても可能です。 –

+0

どのように?あなたが答えたら喜んでください。 –

関連する問題