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

Posted

技术标签:

【中文标题】如何从AngularJS中的另一个控制器调用函数? [复制]【英文标题】:How to call a function from another controller in AngularJS? [duplicate] 【发布时间】:2015-06-10 14:50:37 【问题描述】:

我需要在 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
        
    
]);

【问题讨论】:

将函数放入服务中,并将服务注入到两个控制器中。或者,如果第二个控制器作用域是第一个控制器作用域的子级,则直接调用它。 这对我来说就像一个 XY 问题;虽然有几种方法可以调用另一个控制器上的函数,但确实很少有充分的理由必须这样做。也许描述您的实际问题比询问您尝试实施的解决方案更有帮助?在不同的控制器上调用函数并不是真正的“角度方式”。 一个控制器是另一个控制器的子/孙子吗?或者他们是没有血缘关系的兄弟姐妹? 【参考方案1】:

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

因此,在您的情况下,您想在控制器“二”中调用控制器“一”的方法,正确的方法是:

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

【讨论】:

太棒了!!它对我有用 我可以使用 $rootScope.function_name(); 调用该函数; 参数传递有一个小问题。这解决了我的一个大问题。谢谢 我们不能像这样传递参数。第一个参数是事件,而第二个是数据。比如 $rootScope.$on("CallParentMethod", function(event,data));【参考方案2】:

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

【讨论】:

这并不总是可能的【参考方案3】:

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

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('someMehotdName',function(event,data));【参考方案4】:

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

$scope.parentmethod();  

Angular 将从当前范围开始搜索parentmethod 函数,直到到达rootScope

【讨论】:

【参考方案5】:

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

查看scope 文档

在此查看$on$broadcast$emit

【讨论】:

【参考方案6】:

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

$scope.$parent.parentmethod();

你可以试试here

【讨论】:

以上是关于如何从AngularJS中的另一个控制器调用函数? [复制]的主要内容,如果未能解决你的问题,请参考以下文章

从angularjs中的服务调用控制器函数

AngularJS 控制器可以从同一模块中的另一个控制器继承吗?

如何从Angular中的另一个函数调用一个函数?

如何从 Rcpp 中的另一个函数调用一个函数?

如何从单独文件中的另一个视图调用主干视图函数

如何从Python中的另一个函数调用函数内的函数? [重复]