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

时间:2015-04-06 07:43:08

标签: angularjs controller angularjs-scope

我需要在角度j的另一个控制器中调用函数。如果有可能请帮助我提前感谢

代码:

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

6 个答案:

答案 0 :(得分:109)

控制器之间的通信是通过$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时,您可以将任何数据作为第二个参数发送。

答案 1 :(得分:21)

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

答案 2 :(得分:7)

two控制器中的One控制器 嵌套
然后你可以简单地打电话:

$scope.parentmethod();  

Angular会以parentmethod函数搜索从当前作用域开始向上,直至达到rootScope

答案 3 :(得分:5)

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

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

答案 4 :(得分:4)

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

请参阅scope文档

在此结帐中$on$broadcast$emit

答案 5 :(得分:1)

如果您想在子控制器中执行父控制器的parentmethod函数,请将其命名为:

$scope.$parent.parentmethod();

您可以通过here

进行试用