2015-04-06 17 views
50

tôi cần phải gọi hàm trong một bộ điều khiển ở góc js.How nó có thể cách hãy giúp tôi cảm ơn trướcLàm thế nào để gọi một hàm từ một bộ điều khiển khác trong angularjs?

Code:

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

Đặt chức năng vào dịch vụ và đưa dịch vụ vào cả hai bộ điều khiển. Hoặc, nếu phạm vi điều khiển thứ hai là một con của phạm vi điều khiển đầu tiên, hãy gọi nó trực tiếp. –

+1

Điều này giống như một Câu hỏi XY đối với tôi; Trong khi có một vài cách bạn * có thể * gọi một chức năng trên bộ điều khiển khác, có rất ít lý do chính đáng mà bạn * có * để làm như vậy. Có lẽ mô tả những gì vấn đề thực tế của bạn sẽ hữu ích hơn là hỏi về giải pháp mà bạn đang cố gắng thực hiện? Gọi một chức năng trên một bộ điều khiển khác không thực sự là "góc cạnh" của việc làm. – Claies

+0

là một bộ điều khiển con/con của bộ điều khiển kia? Hay là họ không liên quan? – pixelbits

Trả lời

100

Truyền thông giữa các bộ điều khiển được thực hiện mặc dù $emit + $on/$broadcast + $on phương pháp.

Vì vậy, trong trường hợp của bạn, bạn muốn gọi một phương pháp điều khiển "One" bên trong trình điều khiển "Hai", cách chính xác để làm điều này là:

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

Trong khi $rootScope.$emit được gọi, bạn có thể gửi bất kỳ dữ liệu như tham số thứ hai.

+0

Tuyệt vời !! nó làm việc cho tôi – Naveen

+2

Tôi có thể gọi hàm chỉ bằng $ rootScope.function_name(); –

+0

với một vấn đề nhỏ cho thông qua đi ..điều này giải quyết một vấn đề lớn của tôi. Cảm ơn –

4

Bạn có thể sử dụng các sự kiện để cung cấp dữ liệu của bạn. Mã như thế:

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

Tôi sẽ không sử dụng chức năng từ bộ điều khiển này sang bộ điều khiển khác. Một cách tiếp cận tốt hơn là di chuyển chức năng chung sang một dịch vụ và sau đó tiêm dịch vụ trong cả hai bộ điều khiển.

+3

Điều này không phải lúc nào cũng có thể –

4

Cách tiếp cận tốt nhất để bạn giao tiếp giữa hai bộ điều khiển là sử dụng các sự kiện.

Xem scope tài liệu

Trong này kiểm tra $on, $broadcast$emit.

1

Nếu bạn muốn thực hiện chức năng parentmethod bộ điều khiển của cha mẹ trong một bộ điều khiển trẻ em, gọi nó là:

$scope.$parent.parentmethod(); 

Bạn có thể thử nó trên here

8

Nếu bộ điều khiển twolồng trong One điều khiển.
Sau đó, bạn chỉ có thể gọi:

$scope.parentmethod(); 

góc chí tìm kiếm cho parentmethod chức năng bắt đầu với quy mô hiện tại và cho đến khi nó sẽ đạt được rootScope.

Các vấn đề liên quan