2012-05-07 20 views
156

Tệp sau "công trình" (theo nghĩa là nó không ném bất kỳ lỗi nào):

<!doctype html> 
<html ng-app="modx"> 
    <script src="http://code.angularjs.org/angular-1.0.0rc7.js"></script> 
    <script> 
     angular.module("modx", [], function($routeProvider) { 
     }); 
    </script> 
</html> 

nhưng điều này

<!doctype html> 
<html ng-app="modx"> 
    <script src="http://code.angularjs.org/angular-1.0.0rc7.js"></script> 
    <script> 
     angular.module("modx", [], function($routeProvider, $rootScope) { 
     }); 
    </script> 
</html> 

cung cấp cho các lỗi:

Error: Unknown provider: $rootScope from modx
Source File: http://code.angularjs.org/angular-1.0.0rc7.js
Line: 2491

WTF?

+107

+1 cho WTF làm dòng dưới cùng. –

Trả lời

296

Bạn không thể yêu cầu ví dụ trong giai đoạn cấu hình - bạn chỉ có thể yêu cầu nhà cung cấp.

var app = angular.module('modx', []); 

// configure stuff 
app.config(function($routeProvider, $locationProvider) { 
    // you can inject any provider here 
}); 

// run blocks 
app.run(function($rootScope) { 
    // you can inject any instance here 
}); 

Xem http://docs.angularjs.org/guide/module để biết thêm thông tin.

+9

Cảm ơn, nó có ý nghĩa hoàn hảo, nhưng làm thế nào bạn biết điều đó? Nó có trong tài liệu không? – Malvolio

+140

@Mavolio Không, anh ấy là một trong 3 nhà phát triển cốt lõi. – ChrisOdney

+8

Vâng, FWIW, nó nằm trong tài liệu ngay bây giờ, trong phần "Mô-đun tải & phụ thuộc". –

6

tôi đã tìm đúng "mẫu" sau đây để thể rất hữu ích:

MainCtrl.$inject = ['$scope', '$rootScope', '$location', 'socket', ...]; 
function MainCtrl (scope, rootscope, location, thesocket, ...) { 

nơi, MainCtrl là một bộ điều khiển. Tôi không thoải mái dựa vào các tên tham số của chức năng Bộ điều khiển làm một mô phỏng một đối một của các trường hợp vì sợ rằng tôi có thể thay đổi tên và làm mọi thứ lộn xộn. Tôi thích sử dụng $ inject một cách rõ ràng cho mục đích này.

+0

Đó là gọn gàng, nhưng làm thế nào để bạn truy cập 'MainCtrl' như thế? – f1lt3r

+0

Tôi biết bình luận của bạn là cũ nhưng nó là giá trị trả lời các câu hỏi vì lợi ích của tương lai. như thế này để bạn có thể truy cập chúng theo cách này: 'angular.module ('myMod', []).controller ('theController', controllerFunction); controllerFunction. $ Inject = []; chức năng điều khiểnChức năng() { } ' – Mutmatt

0

I không đề xuất bạn sử dụng cú pháp như bạn đã làm. AngularJs cho phép bạn để có chức năng khác nhau như bạn muốn (run, config, service, factory, vv ..), trong đó có nhiều professional.In chức năng này, bạn thậm chí không cần phải tiêm đó một mình như

MainCtrl.$inject = ['$scope', '$rootScope', '$location', 'socket', ...]; 

bạn có thể sử dụng nó, như bạn đã biết.

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