2014-08-29 18 views
12

Tôi mới sử dụng js góc và tôi đã khai báo nhiều bộ điều khiển và giờ đây tôi muốn chức năng người dùng của một bộ điều khiển vào bộ điều khiển khác. đây là mã mẫu của tôi.Chức năng gọi từ Bộ điều khiển Angular Js

app.controller('Controller1',function($scope,$http,$compile){ 
    $scope.test1=function($scope) 
    { 
      alert("test1"); 
    } 
}); 

app.controller('Controller2',function($scope,$http,$compile){ 
    $scope.test2=function($scope) 
    { 
      alert("test1"); 
    } 
}); 
app.controller('Controller3',function($scope,$http,$compile){ 
    /// 
}); 

Bây giờ tôi muốn gọi hàm test2 bên trong controller3. Ai cũng có thể giúp .. Cảm ơn Avance ... :)

Trả lời

4

Cách tốt nhất là viết dịch vụ và sử dụng dịch vụ đó trong cả hai bộ điều khiển. xem tài liệu Service documentation

Nếu bạn thực sự muốn truy cập phương pháp điều khiển từ bộ điều khiển khác sau đó làm theo các tùy chọn dưới đây: phát ra một sự kiện trên phạm vi:

function FirstController($scope) { $scope.$on('someEvent', function(event, args) {});} 

function SecondController($scope) { $scope.$emit('someEvent', args);} 
+0

Có Nhưng tôi đã viết mã với rất nhiều bộ điều khiển vì vậy bây giờ tôi phải gọi một chức năng trong bộ điều khiển khác. – Mayur

+1

Thats tốt. chỉ bạn cần là di chuyển chức năng phổ biến đó đến một dịch vụ và gọi nó từ các bộ điều khiển được yêu cầu. – Seminda

13

Bạn không thể gọi một phương thức từ một bộ điều khiển trong vòng một bộ điều khiển. Bạn sẽ cần phải giải nén phương thức, tạo một dịch vụ và gọi nó. Điều này cũng sẽ tách mã lẫn nhau và làm cho nó thêm testable

(function() { 
    angular.module('app', []) 
     .service('svc', function() { 
      var svc = {}; 

      svc.method = function() { 
       alert(1); 
      } 

      return svc; 
     }) 
     .controller('ctrl', [ 
      '$scope', 'svc', function($scope, svc) { 
       svc.method(); 
      } 
     ]); 
})(); 

Ví dụ: http://plnkr.co/edit/FQnthYpxgxAiIJYa69hu?p=preview

+0

Cảm ơn bạn đã trợ giúp :) – Mayur

0

Bộ điều khiển là một constructor, nó sẽ tạo ra một trường hợp mới nếu ví dụ được sử dụng trong một chỉ thị.

Bạn vẫn có thể làm những gì bạn muốn, giả định rằng các bộ điều khiển của bạn đang ở trong phạm vi tương tự, chỉ cần làm:

Lưu ý họ phải nằm trong cùng phạm vi, vẫn có thể làm việc nếu một phạm vi con không bị cô lập . Định nghĩa của chỉ thị:

{ 
    controller: Controller1, 
    controllerAs: 'ctrl1', 
    link: function($scope) { 

     $scope.ctrl1.test1(); // call a method from controller 1 
     $scope.ctrl2.test2(); // created by the directive after this definition 
     $scope.ctrl3.test3(); // created by the directive after this definition 
    } 
} 

.... 
{ 
    controller: Controller2, 
    controllerAs: 'ctrl2', 
    link: function($scope) { 
     $scope.ctrl1.test1(); // created earlier 
     $scope.ctrl2.test2(); // ... 
     $scope.ctrl3.test3(); // created by the directive after this definition 
    } 
} 

.... 
{ 
    controller: Controller3, 
    controllerAs: 'ctrl3', 
    link: function($scope) { 
     $scope.ctrl1.test1(); 
     $scope.ctrl2.test2(); 
     $scope.ctrl3.test3(); 
    } 
} 

Điều này sẽ hiệu quả.

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