2014-04-16 11 views
6

Mam moduł. Ma blok konfiguracji, dostawcę i stałą zdefiniowaną. Blok konfiguracji odnosi się zarówno do stałej, jak i dostawcy. Zauważam, że moja stała może być zdefiniowana przed lub po moim bloku konfiguracyjnym. Dostawca musi jednak zostać zdefiniowany PRZED modułem konfiguracji lub w przeciwnym razie wystąpi błąd.Dlaczego dostawca musi być zdefiniowany przed blokiem konfiguracyjnym

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

Oto przykładowy kod:

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'); 

Dlaczego tak jest? Dlaczego nie mogę zdefiniować mojego dostawcy po moim bloku konfiguracyjnym?

Odpowiedz

0

Po wywołaniu provider, config lub constant nic nie dzieje się natychmiast. Połączenia są rejestrowane, umieszczane w kolejce i uruchamiane podczas inicjowania aplikacji.

Zabawną rzeczą z constant jest umieszczenie jej w przedniej części kolejki. Jest więc dostępny przed config, bez względu na wszystko.

+0

Wciąż jestem zdezorientowany, ponieważ jeśli odwołuję się do usługi w moim bloku run, nie powoduje to błędu, jeśli usługa jest zdefiniowana po bloku run. Czy wiesz, dlaczego kolejność definicji nie ma znaczenia dla usług/bloków uruchamiania, ale ma znaczenie dla bloków dostawców/konfiguracji? – Selah

+0

@Selah run bloki są wywoływane po wszystko zostało skonfigurowane. – zeroflagL

+0

@zeroflagL Czy możesz wyjaśnić, dlaczego dostawca musi ZDEFINIOWAĆ przed blokiem konfiguracji? Jeśli nic się nie dzieje od razu, dlaczego wystąpiłby błąd, gdyby dostawca został zdefiniowany po bloku konfiguracji, ale nie, jeśli jest zdefiniowany wcześniej? – dnc253