web-dev-qa-db-ja.com

angularjsの別のコントローラーから関数を呼び出す方法は?

angular jsの別のコントローラーで関数を呼び出す必要があります。

コード:

app.controller('One', ['$scope',
    function($scope) {
        $scope.parentmethod = function() {
            // task
        }
    }
]);
app.controller('two', ['$scope',
    function($scope) {
        $scope.childmethod = function() {
            // Here i want to call parentmethod of One controller
        }
    }
]);
54
Bhavesh Chauhan

コントローラ間の通信は、$emit + $on/$broadcast + $onメソッドを通じて行われます。

そのため、コントローラー「2」内のコントローラー「1」のメソッドを呼び出したい場合、これを行う正しい方法は次のとおりです。

app.controller('One', ['$scope', '$rootScope'
    function($scope) {
        $rootScope.$on("CallParentMethod", function(){
           $scope.parentmethod();
        });

        $scope.parentmethod = function() {
            // task
        }
    }
]);
app.controller('two', ['$scope', '$rootScope'
    function($scope) {
        $scope.childmethod = function() {
            $rootScope.$emit("CallParentMethod", {});
        }
    }
]);

$rootScope.$emitが呼び出されている間、2番目のパラメーターとして任意のデータを送信できます。

109
Yashika Garg

あるコントローラーから別のコントローラーに関数を使用しません。より良い方法は、共通機能をサービスに移動してから、両方のコントローラーにサービスを注入することです。

21
Junaid

twoコントローラーがnested in Oneコントローラーの場合。
[。

$scope.parentmethod();  

Angularは、現在のスコープからparentmethodに到達するまでのrootScope関数の検索になります。

7
cheziHoyzer

イベントを使用してデータを提供できます。そのようなコード:

app.controller('One', ['$scope', function ($scope) {
         $scope.parentmethod=function(){
                 $scope.$emit('one', res);// res - your data
         }
    }]);
    app.controller('two', ['$scope', function ($scope) {
         $scope.$on('updateMiniBasket', function (event, data) {
                ...
         });             
    }]);
5
vitalik_74

2つのコントローラー間で通信するための最善の方法は、イベントを使用することです。

scope のドキュメントを参照してください

これで、$on$broadcast$emitを確認してください。

4
Reena

子コントローラー内で親コントローラーのparentmethod関数を実行する場合は、それを呼び出します。

$scope.$parent.parentmethod();

試してみることができます こちら

1
ER144