2013-12-18 20 views
42

Tôi có đoạn mã trong đó có một Bộ điều khiển Mô-đun Góc, nhưng có một chức năng bên trong cùng một bộ điều khiển và với một cuộc gọi, điều này làm tăng sự nghi ngờ trong tâm trí của tôi. Javascript hoặc Góc? Nếu có thì đọc nó như thế nào? Xem định dạng mã bên dưới mà tôi có:Chức năng bên trong Bộ điều khiển AngularJS

obj.controller('CartController',function($scope){ 

    $scope.totalCart = function(){ 
    var total = 10;  
    return total; 
    } 
    function calculate(){ 
    ...Some Logic.. 
    } 

    $scope.$watch($scope.totalCart, calculate); 
)}; 

Hãy giúp tôi hiểu rằng đây là loại định nghĩa chức năng và gọi trong bộ điều khiển được phép trong Angular/Javascript?

Trả lời

68

Các calculate() là một chức năng riêng - đó là chỉ có thể trong phạm vi của CartController. Nếu bạn không cần phải sử dụng chức năng của bạn trong quan điểm đó là ý tưởng tốt để làm cho nó riêng tư. Nó nói rằng đó là không phải là được dự định sẽ được sử dụng trong chế độ xem, vì vậy nếu người khác làm việc với mã này nên suy nghĩ kỹ trước khi sử dụng nó trong chế độ xem. Hơn nữa: từ trong phạm vi calculate bạn có quyền truy cập vào tất cả các đối tượng có thể truy cập trong phạm vi CartController (bao gồm các đối tượng được chuyển đến CartController làm thông số).

Chức năng được khai báo theo cách này là JS function thích hợp, có nghĩa là bạn có thể tham chiếu đến nó theo tên của nó. Đôi khi nó được cho là dễ đọc hơn nếu bạn khai báo/tạo chức năng của bạn trước và chỉ sau đó giao cho các thuộc tính của một số đối tượng khác (trong trường hợp này $scope):

function someFn (...) { ... } 

function someOtherFn (...) { ... } 

... 

$scope.someFn = someFn 

Trong đoạn trên ý định rất rõ ràng: làm cho someFn có thể truy cập được, trong khi vẫn giữ riêng tư cách someOtherFn.

Btw. các hàm khai báo như: function nameFn(...){...} được gọi là câu lệnh hàm; bạn có thể làm tương tự như sau: var nameFn = function(...) {...} (được gọi là biểu thức hàm). Có một sự khác biệt nhỏ giữa những người - về cơ bản nó là bất hợp pháp:

someFn(); 
var someFn = function(...) {...} 

trong khi đó, công trình này:

someFn(); 
function someFn(...) {...} 

Đôi khi bạn buộc phải sử dụng mô hình này, nhìn ví dụ tại số answer của mình đến số question này.

+0

Mô tả tuyệt vời – Padyster

1

Định nghĩa được cho phép, nó có cùng ảnh hưởng như

$scope.$watch($scope.totalCart, function(){..some logic...}) 
4
$scope.launch = function (which) { 

}; 
var _func = function() {...} 
Các vấn đề liên quan