2014-04-16 8 views
6

Ho un modulo. Ha un blocco di configurazione, un provider e una costante definita. Il blocco di configurazione fa riferimento sia alla costante che al provider. Ho notato che la mia costante può essere definita prima o dopo il mio blocco di configurazione. Tuttavia, il provider deve essere definito PRIMA del blocco di configurazione oppure viene visualizzato un errore.Perché un provider deve essere definito prima di un blocco di configurazione

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

Ecco alcuni esempi di codice:

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

Perché è questo? Perché non posso definire il mio provider dopo il mio blocco di configurazione?

risposta

0

Quando si chiama provider, config o constant non accade nulla immediatamente. Le chiamate vengono registrate, inserite in una coda ed eseguite durante l'inizializzazione dell'applicazione.

La cosa divertente con constant è che è messo di fronte alla coda. Quindi è disponibile prima del config, non importa quale.

+0

Sono ancora confuso perché se faccio riferimento a un servizio nel mio blocco di esecuzione, non causa un errore se il servizio è definito dopo il blocco di esecuzione. Sai perché l'ordine di definizione non ha importanza per i servizi/blocchi di esecuzione ma è importante per i blocchi di provider/configurazione? – Selah

+0

@I blocchi di esecuzione di Sah vengono chiamati dopo che tutto è stato impostato. – zeroflagL

+0

@zeroflagL Potete chiarire perché il provider deve DEFINED prima del blocco di configurazione. Se non accade nulla immediatamente, perché dovrebbe esserci un errore se il provider viene definito dopo il blocco di configurazione, ma non se è stato definito prima? – dnc253