2014-06-08 30 views
6

Điều gì là tốt hơn trong Góc - để liên kết với một biến hoặc một hàm. Cụ thể:Góc: phạm vi biến vs hàm

  • Có bất kỳ hình phạt hiệu suất nào do cuộc gọi thông báo hoặc đồng hồ bổ sung được tạo cho một chức năng không?
  • Có đề xuất nào về chức năng phạm vi nên và không nên thực hiện không?

Ví dụ cho hai lựa chọn:

<!-- With function --> 
<button ng-disabled="noDataFoo()">Add</button> 

<!-- With variable --> 
<button ng-disabled="noDataFlag">Add</button> 

Backing điều khiển:

app.controller('sample', function($scope, $http) { 
    $scope.noDataFlag = true; 

    $scope.noDataFoo = function() { 
     return !$scope.data; 
    }; 

    $http('/api/getdata').success(function(data) { 
     $scope.data = data; 
     $scope.noDataFlag = false; 
    }; 
}); 

Trả lời

2

tôi thực hiện một số kiểm tra và đếm bao nhiêu lần so với hàm được gọi dưới hoàn cảnh khác nhau. Nó xảy ra, chức năng được gọi là số lần nó có ràng buộc, đôi khi gấp đôi số và dường như xảy ra sau mỗi hoạt động bên ngoài, như tải lại trang hoặc bấm nút hoặc gọi AJAX.

Nói cách đơn giản, nếu bạn có <button ng-disabled="noDataFoo()"> và sau đó {{noDataFoo()}} trong HTML, chức năng sẽ được gọi là 4 lần khi tải trang, sau đó thêm 2 hoặc 4 lần nếu một số dịch vụ $http mang dữ liệu và 2 hoặc 4 lần khác nút khác đã được nhấp. Từ thử nghiệm, con số là 2 nếu noDataFoo không thay đổi và 4 nếu nó thay đổi. Bằng cách này, cùng giữ cho các nhấp chuột trên bộ điều khiển khác.

Kết luận của tôi là: OK để liên kết với các chức năng nhanh. Đối với những cái dài hơn thì tốt hơn là giữ số lượng các ràng buộc nhỏ. Và đối với những người thậm chí còn lâu hơn, nó sẽ khôn ngoan hơn để lưu lại kết quả và xử lý các cập nhật bộ nhớ cache "thủ công".

+0

Đây là cũ nhưng tôi chỉ ra rằng phạm vi biến nên là sự lựa chọn đầu tiên cho một số lý do bạn đã nêu. – bhantol

2

Tôi không phải là một chuyên gia về hiệu suất javascript hoặc bất cứ điều gì, nhưng quan điểm ngây thơ của tôi sẽ là biến sẽ ra thực hiện hàm bằng MAYBE một vài nano giây vì đó là quy trình 2 bước.

Ngoài ra, ví dụ trên sẽ chỉ là một cách dễ dàng hiện bằng:

<button ng-disabled="!data">Add</button> 
+0

Cảm ơn bạn rất nhiều vì câu trả lời của bạn. Tôi thấy rằng tôi đã không giải thích đầy đủ ý định của mình. Mối quan tâm của tôi là - thường thì Angular tính toán hàm. Có lẽ có tồn tại góc khuyến nghị cho không ràng buộc với chức năng. Ví dụ trong câu hỏi được đơn giản hóa, trong hàm ứng dụng dài hơn và nó phụ thuộc vào giá trị trả về từ một số API. Mà làm cho biến trạng thái khó quản lý ... –