2015-04-06 47 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

相關問題