web-dev-qa-db-fra.com

Comment appeler une fonction depuis un autre contrôleur dans angularjs?

J'ai besoin d'appeler la fonction dans un autre contrôleur dans angular js.Comment cela est-il possible, aidez-moi, merci d'avance

Code:

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

La communication entre les contrôleurs s'effectue par les méthodes $emit + $on/$broadcast + $on.

Donc, dans votre cas, vous souhaitez appeler une méthode du contrôleur "Un" dans le contrôleur "Deux", la manière correcte de procéder est la suivante:

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", {});
        }
    }
]);

Lorsque $rootScope.$emit est appelé, vous pouvez envoyer n’importe quelle donnée en tant que second paramètre.

112
Yashika Garg

Je n'utiliserais pas la fonction d'un contrôleur à un autre. Une meilleure approche serait de déplacer la fonction commune vers un service, puis d’injecter le service dans les deux contrôleurs.

21
Junaid

Si le contrôleur two est imbriqué dans le contrôleur One.
Ensuite, vous pouvez simplement appeler:

$scope.parentmethod();  

La volonté angulaire recherche pour la fonction parentmethod commençant par la portée actuelle et jusqu’à atteindre la rootScope.

7
cheziHoyzer

Vous pouvez utiliser des événements pour fournir vos données. Code comme ça:

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

La meilleure approche pour vous de communiquer entre les deux contrôleurs consiste à utiliser des événements.

Voir la documentation scope

Dans cette caisse, $on, $broadcast et $emit.

4
Reena

Si vous souhaitez exécuter la fonction parentmethod du contrôleur parent dans un contrôleur enfant, appelez-la:

$scope.$parent.parentmethod();

Vous pouvez l'essayer ici

1
ER144