2012-09-18 43 views
34

Theo quan điểm của tôi, tôi muốn làm:Vị trí đặt các hàm do người dùng định nghĩa trong Angular JS?

<p> 
    {{ say() }} 
</p> 

đâu say được định nghĩa như vậy:

say = function() { 
    return "Hello World"; 
} 

tôi có thể xác định nó trong bộ điều khiển của tôi:

function TestCtrl($scope) { 
    $scope.say = function() { ... }; 
} 

Nhưng sau đó nó chỉ có thể truy cập trong bộ điều khiển đó.

Nếu tôi xác định hàm bên ngoài cấu trúc tệp Góc, nó sẽ không hiển thị gì cả. Tương tự nếu tôi xác định nó trong tập tin controllers.js của mình, nhưng bên ngoài phạm vi chức năng bộ điều khiển.

Vị trí thích hợp để đặt chức năng của tôi, vì vậy tôi có thể hiển thị nó trong bất kỳ bộ điều khiển nào?

Trả lời

48

Một cách là create a service với các chức năng bạn muốn chia sẻ trên nhiều bộ điều khiển. Xem this post để biết thêm thông tin.

Sau khi bạn làm như vậy bạn có thể tiêm các dịch vụ mà bạn đã tạo vào bất kỳ bộ điều khiển và truy cập vào say() chức năng với mã một cái gì đó như thế này:

function TestCtrl($scope, myService){ 
    $scope.say = myService.say; 
} 

Trong trường hợp bạn định nghĩa myService như:

angular.module('myApp', []) 
    .factory('myService', function() { 
     return { 
      say: function() { 
       return "Hello World"; 
      } 
     } 
    }); 

đây là một ví dụ jsFiddle.

+0

Tuyệt vời ... Tôi đã mong đợi nó được với các dịch vụ, nhưng không thể tìm thấy cú pháp để thêm nó vào –

+5

Chỉ cần FYI, một cú pháp thay thế (Tôi thích xem/đọc 'dịch vụ' thay vì 'nhà máy' nếu tôi chỉ cần hàm hàm dựng): .service ('myService', function() { this.say = function() {return "Hello World";} }); –

+1

"Vấn đề" với dịch vụ thích hợp là mỗi khi bạn sử dụng dịch vụ, bạn sẽ có được một phiên bản mới của dịch vụ đó. Trong trường hợp này, nó có thể không phải là ý tưởng tốt nhất. – Spock

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