2014-04-16 16 views
6

Tôi có một mô-đun. Nó có một khối cấu hình, một nhà cung cấp, và một hằng số được xác định. Khối cấu hình tham chiếu cả hằng số và nhà cung cấp. Tôi nhận thấy rằng hằng số của tôi có thể được định nghĩa trước hoặc sau khối cấu hình của tôi. Tuy nhiên, nhà cung cấp phải được xác định TRƯỚC KHI khối cấu hình hoặc nếu không tôi sẽ gặp lỗi.Tại sao nhà cung cấp phải được xác định trước một khối cấu hình

Error: [$injector:modulerr] Failed to instantiate module loadOrder due to: 
[$injector:unpr] Unknown provider: greetingsProvider 

Dưới đây là một số mẫu mã:

var myModule = angular.module('loadOrder', []); 

//if I define this after the config block, I get an error 
angular.module('loadOrder').provider('greetings',[ function(){ 
    this.$get = [function(){ 
     return { greet: function(){ return "Hola"; } }; 
    }]; 
}]); 

myModule.config(['$provide', 'greetingsProvider', 'planetName', function($provide, loadOrderProvider, planetName){ 
    $provide.value('someVals',[3,6,8]); 
    console.log("Lets go to", planetName); 
}]); 

myModule.constant('planetName', 'Saturn'); 

Tại sao điều này? Tại sao tôi không thể xác định nhà cung cấp của mình sau khối cấu hình của tôi?

Trả lời

0

Khi bạn gọi provider, config hoặc constant không có gì xảy ra ngay lập tức. Các cuộc gọi được đăng ký, đặt trong một hàng đợi và chạy trong quá trình khởi tạo ứng dụng.

Điều thú vị với constant là nó được đặt ở phía trước hàng đợi. Vì vậy, nó có sẵn trước khi config, không có vấn đề gì.

+0

Tôi vẫn còn bối rối vì nếu tôi tham chiếu một dịch vụ trong khối chạy của mình, nó sẽ không gây ra lỗi nếu dịch vụ được xác định sau khối chạy. Bạn có biết tại sao thứ tự định nghĩa không quan trọng đối với các dịch vụ/khối chạy nhưng nó có quan trọng đối với các nhà cung cấp/khối cấu hình không? – Selah

+0

@Selah khối chạy được gọi là sau khi tất cả mọi thứ đã được thiết lập. – zeroflagL

+0

@zeroflagL Bạn có thể làm rõ lý do tại sao nhà cung cấp phải xác định trước khối cấu hình. Nếu không có gì xảy ra ngay lập tức, tại sao sẽ có lỗi nếu nhà cung cấp được xác định sau khối cấu hình, nhưng không phải nếu nó được xác định trước đó? – dnc253

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