2015-04-06 52 views
50

我需要调用函数在角另一个控制器js.How有可能的方式请帮我在此先感谢如何从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 
     } 
    } 
]); 
+1

将该功能放入服务中,并将服务注入到两个控制器中。或者,如果第二个控制器作用域是第一个控制器作用域的子项,则直接调用它。 – 2015-04-06 07:47:16

+1

这对我来说就像一个XY问题;虽然有几种方法可以*在另一个控制器上调用某个功能,但实际上很少有很好的理由。也许描述你的实际问题会比询问你正在实施的解决方案更有帮助?在一个不同的控制器上调用一个函数并不是真正做事的“角色方式”。 – Claies 2015-04-06 07:49:21

+0

是一个控制器是另一个控制器的子/大孩子吗?或者他们是不相关的兄弟姐妹? – pixelbits 2015-04-06 08:11:08

回答

100

控制器之间的通信是做虽然$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被调用,您可以发送任何数据作为第二个参数。

+0

太棒了!它为我工作 – Naveen 2016-05-16 12:54:09

+2

我能够调用该函数只需使用$ rootScope.function_name(); – 2016-12-22 06:40:11

+0

有一个param传递的小问题。这解决了我的一个大问题。谢谢 – 2017-11-09 05:46:03

4

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

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

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

+3

这并不总是可能的 – 2017-04-21 23:32:39

4

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

scope文档

在此次检查出$on$broadcast$emit

1

如果你想执行一个孩子控制器内部父控制器的parentmethod功能,称之为:

$scope.$parent.parentmethod(); 

,您可以尝试在here

8

如果two控制器One控制器嵌套
然后,您只需拨打:

$scope.parentmethod(); 

角意志搜索parentmethod功能启动电流范围,直到它达到了rootScope

相关问题