Đầu tiên một chút làm rõ:
Đối với dependency injection, nó không quan trọng cho dù bạn khai báo một bộ điều khiển sử dụng một chức năng toàn cầu hoặc làm đối số của module.controller(...)
phương pháp. Dependency injector chỉ quan tâm đến chính hàm đó. Vì vậy, những gì bạn đang thực sự là hỏi về sự tương đương của hai:
// First
function MyController($scope) {}
MyController.$inject = [ '$scope '];
// Second
function($scope) {}
Và bởi vì cho dù các chức năng điều khiển là vô danh hay không cũng không quan trọng đối với các vòi phun, hai bên trên có thể chỉ là tốt là:
// First
function MyController($scope) {}
MyController.$inject = [ '$scope '];
// Second
function MyController($scope) {}
Bây giờ rõ ràng là sự khác biệt duy nhất giữa hai bộ điều khiển của bạn là sự hiện diện của thuộc tính $inject
ở một trong số chúng.
Và đây là câu trả lời thực tế cho câu hỏi của bạn:
Hai bộ điều khiển là gần như giống nhau. Cả hai sẽ nhận được $scope
làm đối số và sẽ hoạt động giống nhau. Tuy nhiên, nếu bạn quyết định rút ngắn mã của mình sau, chỉ phiên bản có mảng $inject
được đặt trên đó sẽ hoạt động bình thường. Điều này là do nếu bạn không chỉ định mảng $inject
hoặc sử dụng phương pháp chú thích nội dòng (http://docs.angularjs.org/guide/di#inlineannotation), cách duy nhất để bộ phát hiện ra những phụ thuộc nào bạn quan tâm là kiểm tra tên của đối số chức năng của bạn ID dịch vụ). Nhưng việc rút gọn sẽ đặt tên cho các đối số đó một cách ngẫu nhiên, do đó loại bỏ cơ hội nhận ra các phụ thuộc theo cách này.
Vì vậy, nếu bạn định giảm thiểu mã của mình, bạn phải chỉ định rõ ràng phụ thuộc sử dụng chú thích mảng hoặc nội tuyến $inject
, nếu không, mọi phiên bản sẽ hoạt động tốt.
Cảm ơn nhưng điều đó dường như không hoạt động với '$ http' ... được hỏi về nó ở đây: http://stackoverflow.com/q/16664325 – user2283066