如何从 AngularJS 中的另一个控制器调用函数?

How to call a function from another controller in AngularJS?

我需要在 AngularJS 中调用另一个控制器中的函数。我该怎么做?

代码:

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

您可以使用事件来提供您的数据。这样的代码:

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

我不会将一个控制器的功能用于另一个控制器。更好的方法是将公共功能移动到服务,然后在两个控制器中注入服务。

您在两个控制器之间进行通信的最佳方法是使用事件。

请参阅 scope 文档

在此查看 $on$broadcast$emit

如果您想在子控制器中执行父控制器的 parentmethod 函数,请调用它:

$scope.$parent.parentmethod();

你可以试试here

控制器之间的通信是通过 $emit + $on / $broadcast + $on 方法完成的。

所以在你的情况下你想在 Controller "Two" 中调用 Controller "One" 的方法,正确的方法是:

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 时,您可以将任何数据作为第二个参数发送。

如果two控制器嵌套One控制器中。
然后你可以简单地调用:

$scope.parentmethod();  

Angular 将 search for parentmethod 函数从当前范围开始,直到到达 rootScope.