2013-09-22 9 views
5

Ho il seguente:Perché non posso usare localStorage nel mio .config quando è incluso nella definizione di .module?

var app = angular 
    .module('app', ['ui.router', 'admin', 'home', 'questions', 'ngResource', 'LocalStorageModule']) 
    .config(['$sceProvider', '$stateProvider', '$locationProvider', 'localStorageService', 
     function ($sceProvider, $stateProvider, $locationProvider, localStorageService) { 

     $sceProvider.enabled(false); 
     $locationProvider.html5Mode(true); 

     localStorageService.add('adminContent', 'xx'); 

Questo mi sta dando un errore:

Uncaught Error: [$injector:modulerr] Failed to instantiate module app due to: 
Error: [$injector:unpr] Unknown provider: localStorageService 
http://errors.angularjs.org/1.2.0-rc.2/$injector/unpr?p0=localStorageService 
    at hasOwnPropertyFn (http://127.0.0.1:81/Scripts/angular-v1.2.0-rc.2.js:78:12) 
    at http://127.0.0.1:81/Scripts/angular-v1.2.0-rc.2.js:2997:19 
    at getService (http://127.0.0.1:81/Scripts/angular-v1.2.0-rc.2.js:3119:39) 
    at Object.invoke (http://127.0.0.1:81/Scripts/angular-v1.2.0-rc.2.js:3140:13) 
    at http://127.0.0.1:81/Scripts/angular-v1.2.0-rc.2.js:3078:37 
    at Array.forEach (native) 
    at forEach (http://127.0.0.1:81/Scripts/angular-v1.2.0-rc.2.js:224:11) 
    at loadModules (http://127.0.0.1:81/Scripts/angular-v1.2.0-rc.2.js:3065:5) 
    at createInjector (http://127.0.0.1:81/Scripts/angular-v1.2.0-rc.2.js:3007:11) 
    at doBootstrap (http://127.0.0.1:81/Scripts/angular-v1.2.0-rc.2.js:1152:20) 
http://errors.angularjs.org/1.2.0-rc.2/$injector/modulerr?p0=app&p1=Error%3…http%3A%2F%2F127.0.0.1%3A81%2FScripts%2Fangular-v1.2.0-rc.2.js%3A1152%3A20) 

Non è possibile utilizzare localStorage in config come questo? Ho incluso il codice per il modulo localstorage e viene caricato prima dell'app.js. Funziona in altre parti dell'applicazione, ma la stessa linea non funziona se inserita nell'app.config

risposta

8

Solo i provider e le costanti sono iniettabili nei blocchi di configurazione. Vedere la documentazione di AngularJs per ulteriori approfondimenti: http://docs.angularjs.org/guide/module (sezione "Caricamento del modulo & dipendenze").

Configuration blocks - get executed during the provider registrations and configuration phase. Only providers and constants can be injected into configuration blocks. This is to prevent accidental instantiation of services before they have been fully configured.

+0

È possibile aggirare il problema con "$ injector", no? – Casey

1

Mentre la risposta accettata risponde correttamente alla domanda, non offre alcuna soluzione (per i neofiti angolari che cercano il modo giusto per fare questo).

È possibile accedere ai servizi in fase di esecuzione, il che avviene dopo la configurazione. Ad esempio:

angular.module('app').run(storeAdminContent); 

storeAdminContent.$inject = ['localStorageService']; 
function storeAdminContent(localStorageService) { 
    localStorageService.add('adminContent', 'xx'); 
} 
+0

Voglio controllare se ho una sessione o meno ed eseguire il metodo dovrebbe essere eseguito dopo la configurazione, quindi ho controllato prima del routing definito in config? – Yatin

+0

Sarebbe possibile farlo, ma sarebbe contro design angolare. Le route dell'amministratore dovrebbero sempre esistere, ma è necessario accertarsi che l'utente sia autenticato una volta entrati in tali percorsi. Un'altra opzione (forse migliore) sarebbe quella di avere un'applicazione angolare completamente separata per il lato amministratore e condividere il codice tra di loro usando i moduli nodo o bower. –

Problemi correlati